String类,StringBuilder类,StringBuffer类

前言

String类,StringBuilder类,StringBuffer类都是java提供的定义字符串的类,下面是三种字符串类的异同介绍

String类:String类表示的字符串是是常量,一旦创建内容和长度都无法修改

StringBuilder类:StringBuilder类表示字符容器,创建后内容和长度可以随时修改,该类中方法没有实现线程安全

StringBuffer类:StringBuffer类表示字符容器,创建后内容和长度可以随时修改,该类中的方法实现了线程安全

总结StringBuilder类和StringBuffer类相比基本功能一致,但由于前者未实现线程安全,较后者具有了更强的性能;当我们在进行字符串操作时,如果该字符串仅仅用于数据类型的表示,选择String类即可,如果需要对字符串进行增加,删除操作,优先选择StringBuilder类和StringBuffer类,具体如果有大量字符串需要处理且不要求线程安全,优先考虑StringBuilder类,如果要求线程安全那优先选择StringBuffer类

String类

String类的包括String类的初始化和String中的方法学习

String类的初始化

由于String类创建的对象是字符串常量,所以对象一旦创建就不可以对其进行改变,如果我们给已赋值的对象重新赋值,系统会优先在字符长常量池中进行检索相应字符串,若找到,则直接指向该字符串常量的地址,若没找到,则在字符长常量池中分配一块空间存储该字符串,并让该对象直接指向该空间的地址 

其相应的构造方法有:

 

实际操作中会根据输入的值的类型选择相应的构造方法 

String类的常用方法

1. **构造方法**:


    * `String()`: 创建一个新的空字符串。
    * `String(byte[] bytes)`: 通过字节数组创建字符串。
    * `String(byte[] bytes, int offset, int length)`: 通过字节数组的一部分创建字符串。
    * `String(char[] value)`: 通过字符数组创建字符串。
    * `String(char[] value, int offset, int count)`: 通过字符数组的一部分创建字符串。

2. **长度方法**:


    * `int length()`: 返回字符串的长度。
3. **比较方法**:


    * `int compareTo(String anotherString)`: 按字典顺序比较两个字符串。
    * `boolean equals(Object anObject)`: 比较此字符串与指定对象是否相等。
    * `boolean equalsIgnoreCase(String anotherString)`: 按字典顺序比较两个字符串,不考虑大小写。
    * `int compareToIgnoreCase(String str)`: 按字典顺序比较两个字符串,不考虑大小写。
4. **查找方法**:


    * `int indexOf(int ch)`: 返回指定字符在字符串中首次出现的索引。
    * `int indexOf(int ch, int fromIndex)`: 从指定索引处开始,返回指定字符在字符串中首次出现的索引。
    * `int indexOf(String str)`: 返回指定子字符串在字符串中首次出现的索引。
    * `int indexOf(String str, int fromIndex)`: 从指定索引处开始,返回指定子字符串在字符串中首次出现的索引。
    * `lastIndexOf(int ch)`: 返回指定字符在字符串中最后一次出现的索引。
    * `lastIndexOf(int ch, int fromIndex)`: 从指定索引处开始反向搜索,返回指定字符在字符串中最后一次出现的索引。
    * `lastIndexOf(String str)`: 返回指定子字符串在字符串中最后一次出现的索引。
    * `lastIndexOf(String str, int fromIndex)`: 从指定索引处开始反向搜索,返回指定子字符串在字符串中最后一次出现的索引。
5. **获取子字符串**:


    * `String substring(int beginIndex)`: 返回一个新的字符串,它是此字符串的一个子字符串。
    * `String substring(int beginIndex, int endIndex)`: 返回一个新字符串,它是此字符串的一个子字符串。
6. **替换方法**:


    * `String replace(char oldChar, char newChar)`: 返回一个新的字符串,它是通过用新字符替换此字符串中的所有旧字符得到的。
    * `String replace(CharSequence target, CharSequence replacement)`: 使用指定的字面值替换序列替换此字符串中所有指定的字面值目标序列。
7. **转换方法**:


    * `char[] toCharArray()`: 将此字符串转换为一个新的字符数组。
    * `byte[] getBytes()`: 使用平台的默认字符集将此 `String` 编码为字节序列,并将结果存储在新的字节数组中。
    * `byte[] getBytes(String charsetName)`: 使用指定的字符集将此 `String` 编码为字节序列,并将结果存储在新的字节数组中。
8. **其他方法**:


    * `String trim()`: 返回字符串的副本,忽略前导空白和尾部空白。
    * `boolean startsWith(String prefix)`: 测试此字符串是否以指定的前缀开始。
    * `boolean endsWith(String suffix)`: 测试此字符串是否以指定的后缀结束。
    * `int hashCode()`: 返回字符串的哈希码。
    * `String toLowerCase()`: 使用默认语言环境的规则将此 `String` 中的所有字符转换为小写。
    * `String toUpperCase()`: 使用默认语言环境的规则将此 `String` 中的所有字符转换为大写。
    * `String concat(String str)`: 将指定的字符串连接到此字符串的结尾。

这只是String类中提供的一些常用方法。实际上,String类提供了许多其他有用的方法和常量,可以在 Java 官方文档中找到完整的方法列表和详细说明。

Stringbuffer类 

StringBuffer类在 Java 中用于表示可变的字符串。与String类不同,StringBuffer类的对象可以被修改,而不会生成新的对象。这使得StringBuffer在需要频繁修改字符串的场合更加高效。

以下是 `StringBuffer` 类中的一些常用方法:

1. **构造方法**:

    * `StringBuffer()`: 构造一个空字符串缓冲区,初始容量为 16 个字符。
    * `StringBuffer(int capacity)`: 构造一个指定容量的空字符串缓冲区。
    * `StringBuffer(String str)`: 构造一个包含指定字符串内容的字符串缓冲区。

2. **追加内容**:

    * `StringBuffer append(Object obj)`: 将指定的对象追加到此序列。
    * `StringBuffer append(String str)`: 将指定的字符串追加到此序列。
    * `StringBuffer append(char c)`: 将指定的字符追加到此序列。
    * 其他重载的 `append` 方法,可以追加不同类型的参数。

3. **插入内容**:

    * `StringBuffer insert(int offset, Object obj)`: 将指定对象插入此序列的指定位置。
    * `StringBuffer insert(int offset, String str)`: 将指定字符串插入此序列的指定位置。
    * `StringBuffer insert(int offset, char c)`: 将指定字符插入此序列的指定位置。

4. **删除内容**:

    * `StringBuffer delete(int start, int end)`: 移除此序列的一个子字符串。
    * `StringBuffer deleteCharAt(int index)`: 移除指定位置的字符。

5. **替换内容**:

    * `StringBuffer replace(int start, int end, String str)`: 使用给定字符串替换此序列的一个子字符串。

6. **反转内容**:

    * `StringBuffer reverse()`: 将此字符序列反转。

7. **设置字符**:

    * `void setCharAt(int index, char ch)`: 将给定索引处的字符设置为 `ch`。

8. **截取子序列**:

    * `StringBuffer substring(int start)`: 返回一个新的字符串缓冲区,它包含此序列当前内容的一个子序列。
    * `StringBuffer substring(int start, int end)`: 返回一个新的字符串缓冲区,它包含此序列当前内容的一个子序列。

9. **长度和容量**:

    * `int length()`: 返回长度(字符数)。
    * `int capacity()`: 返回当前容量。

10. **改变容量**:

    * `void ensureCapacity(int minimumCapacity)`: 确保容量至少等于指定的最小值。
    * `void setLength(int newLength)`: 设置字符序列的长度。

11. **比较**:

    * `boolean equals(Object anObject)`: 比较此字符串缓冲区与指定的对象是否相等。

12. **其他**:

    * `String toString()`: 返回此序列中数据的字符串表示形式。
    * `void capacity(int newCapacity)`: 调整此序列的容量。

这些只是 `StringBuffer` 类中提供的一些常用方法。实际上,`StringBuffer` 类提供了更多的方法和功能,可以在 Java 官方文档中找到完整的方法列表和详细说明。需要注意的是,由于StringBuffer 是线程安全的,因此它的某些操作可能比 StringBuilder慢,后者在单线程环境下是首选,因为它更快

一些注意

每个字符串常量都可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6个维度分析实时渲染和Webgl技术异同

在日常交流中,对Webgl技术熟悉的合作伙伴,在初次了解实时渲染技术时,都会问二者之间的异同。目前很多要求B/S架构的项目,很多在用webgl技术路线,而且这个方案在行业里比较普,业主方对这个也比较熟悉&#x…

JAVA实现图像取模

JAVA对图像取模 就是图片变成点阵 原图 取模效果图 代码如下: public static void main(String[] args) throws IOException {try {// 读取图像文件BufferedImage image ImageIO.read(new File("C:/Users/xiaol/Desktop/img/0.jpg"));// 定义阈值&am…

冬去春来天气阴晴不定 美食拿捏味蕾安稳换季

俗话说“春打六九头”,3月虽然已经入春,但是天气依然是凉飕飕的 ,冬天春天的换季期,因为天气的变化,尤为痛苦。但是来到了换季期,天气也不总是那么稳定,随着气温的起伏,我们的食欲也…

Vue项目实战--空间论坛(1)

环境准备 安装好node.js,Vue后 添加插件 router---路由,多页面的应用 vuex---在多个组件之间维护同一个数据 添加依赖 bootstrap---美工 popperjs/core vue项目介绍 views-----对应vue文件,页面 router-----路由,页面,c…

leetCode刷题 4.寻找两个正序数组的中位数

目录 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目: 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入&…

1分钟带你搞定Python函数分类

python语言中,函数可以分为内置函数、自定义函数、有参数函数、无参数函数、有名字函数和匿名函数。其中,内置函数可以直接使用,自定义函数需要根据需求定义。有参数函数在定义时需要指定参数,调用时传入参数。无参数函数在定义时…

git远程仓库使用

赋值这个地址clone 克隆之后 cd slam_oncloud/ git remote add chenxnew ssh://git192.168.3.40:1022/chenxiao/slam_oncloud.git 查看一下 linuxchenxiao:/media/linux/mydisk/cloud_slam/slam_oncloud$ git remote add chenxnew ssh://git192.168.3.40:1022/chenxiao/sla…

记录一次Dubbo远程调用的错误

情景:有一个生成PDF的接口中,如下: GET Path("/getPDF") public void getPDF(QueryParam("id") String id, Context HttpServletResponse response) {………… }之前实现的代码都写在了Controller里面,代码里…

北斗卫星助力无人机在沙漠播种,促进沙漠治理

北斗卫星助力无人机在沙漠播种,促进沙漠治理 近年来,随着科技的不断发展,北斗卫星和无人机技术的结合被广泛应用于沙漠治理领域,为解决沙漠化问题提供了全新的思路和解决方案。 近日,黄河“几字弯”北岸的内蒙古自治…

word打字后面的字消失是怎么回事

在使用Microsoft Word进行文档编辑时,很多用户可能会遇到一个令人困惑的问题:当在文档中打字时,后面的字却莫名其妙地消失了。这种情况不仅影响了编辑效率,还可能导致重要数据的丢失。那么,这一现象背后的原因是什么&a…

JVM3_数据库连接池虚引用ConnectionFinalizerPhantomReference引起的FullGC问题排查

背景 XOP服务运行期间,查看Grafana面板,发现堆内存周期性堆积,Full GC时间略长,需要调查下原因 目录 垃圾收集器概述 常见的垃圾收集器分区收集策略为什么CMS没成为默认收集器 查看JVM运行时环境分析快照 PhantomReference虚引用…

深度学习目标检测】二十二、基于深度学习的肺炎检测系统-含数据集、GUI和源码(python,yolov8)

肺炎尽管很常见,但准确诊断是一项困难的任务。它要求训练有素的专家对胸部X光片进行检查,并通过临床病史,生命体征和实验室检查进行确认。肺炎通常表现为胸部X光片上一个或多个区域的阴影(opacity)增加。但是,由于肺部有许多其他状…

每日OJ题_链表①_力扣2. 两数相加

目录 力扣2. 两数相加 解析代码 力扣2. 两数相加 2. 两数相加 难度 中等 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个…

二维码门楼牌管理系统应用场景:数据管理的智慧新选择

文章目录 前言一、数据管理部门的智慧工具二、助力决策制定与优质服务提供三、二维码门楼牌管理系统的优势四、展望未来 前言 随着科技的飞速发展,二维码门楼牌管理系统正逐渐成为城市管理的智慧新选择。该系统不仅提升了数据管理效率,还为政府和企业提…

python并发编程:阻塞IO

阻塞IO(blocking IO) 在Linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于…

Python编程作业五:面向对象编程

目录 一、类的定义和方法 二、图书管理系统 一、类的定义和方法 定义一个学生类(Student),包括学号(id)、姓名(name)、出生日期(birthday)和分数(score)4个属性,其中出生日期是私有属性,不能被外界直接访问。该类应具…

力扣每日一题 找出字符串的可整除数组 数论

Problem: 2575. 找出字符串的可整除数组 文章目录 思路复杂度Code 思路 👨‍🏫 灵神题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int[] divisibilityArray(String word, int m){in…

销冠MPV增配不增价,2024款腾势D9正式上市

3月6日,2024款腾势D9正式上市,官方指导价33.98万元起。销冠MPV增配不增价,并推出2000元定金抵扣车辆尾款10000元等上市权益。针对老用户也推出了30000元置换补贴等感恩回馈。 作为腾势汽车破局豪华MPV全品类冠军的扛鼎之作,腾势D9…

异地组网搭建方案

在这个信息爆炸的时代,人与人之间的联系变得越来越密切,而异地组网搭建方案也因此变得越 来越重要。无论是跨国企业、远程学习还是国际合作,构建一个快捷稳定的异地组网系统,已经 成为许多组织和个人不可或缺的需求。接下来&#…

换个角度看禅让制止于禹

前言 在历史课本上,对尧、舜、禹三代君王的描述是,他们在去世之前通过禅让制的方式把自己的王位禅让给了其他有贤明的能臣。 禅让制也是中国古代时期被无数的文人志士追捧的一个制度,因为他们觉得那个时代是公天下的时代。 可实际上自从人…