[JAVASE] String类 StringBuffer类 StringBuilder类,Java中的String、StringBuffer与StringBuilder类详解

马肤
摘要:在Java SE中,String类是不可变的字符序列,用于处理文本数据。而StringBuffer类和StringBuilder类都是可变的字符序列,常用于在程序中修改字符串内容。StringBuffer类相较于StringBuilder类,由于其方法大多同步,因此在多线程环境下更为安全。三类在处理字符串时各有优势,开发者可根据具体需求和场景选择合适类进行操作。

目录

一.String类

        1.1 String字符串不可变的原因

        1.2 字符串中的比较方法         

                1.2.1 equals

                1.2.2 compareTo 与 compareToIgnoreCase

        1.3 字符串中的查找方法

                1.3.1 charAt 

          1.3.2 indexOf 与 lastIndexOf

        1.4 字符串中的转换方法

                1.4.1 valueOf

                1.4.2 toUpperCase 与 toLowerCase

        1.5 字符串的格式化 

        1.6 字符串的替换        

                1.6.1 replace

                1.6.2 replaceFirst 与 replaceALL 

        1.7 字符串的分割

         1.8 字符串的截取 

        1.9 字符串的清除

        1.10 小总结 (重要)

二. StringBuffer类

        2.1 StringBuffer类的说明  

        2.2 字符串的插入

                2.2.1 insert

                2.2.2 append

        2.3 字符串的删除 

        2.4 StringBuffer类型 ==> String类型

        2.5 小总结 

 三.StringBuilder类

        3.1 StringBuilder类的说明 

        3.2 StringBuilder类中的常用方法 

        3.3 小总结 

四. 总结 


一.String类

        1.1 String字符串不可变的原因

String类 定义的字符串是不可变的.

[JAVASE] String类 StringBuffer类 StringBuilder类,Java中的String、StringBuffer与StringBuilder类详解 第1张 1. 第一个 final 表示这个类不能够再被其他类继承.

 2. 第二个 final 表示 value 这个值是常量, 不能够进行修改, 但是可以修改value这个引用指向的对象中的值.(也就是说这个数组中的值是可以修改的, 但是value的值不能被修改)

 3. private才是String类定义的字符串不可变的真正原因.

     被private修饰 表示这个成员变量只能够在当前类中进行访问, 所以value指向的对象(数组)中的值在String类外不能够被修改. 这也是 String定义的字符串是不可变的根本原因.

        1.2 字符串中的比较方法         

                1.2.1 equals

equals 方法 来比较两个字符串的内容是否相等, 返回值是boolean类型.

[JAVASE] String类 StringBuffer类 StringBuilder类,Java中的String、StringBuffer与StringBuilder类详解 第2张

结果为:  false   false

a. name == name2 比较两个字符串的地址是否相等.

b. name.equals(name2) 比较两个字符串的内容是否相等.

                1.2.2 compareTo 与 compareToIgnoreCase

compareTo 方法:比较两个字符串的大小 (大小写敏感).

compareToIgnoreCase 方法: 也是比较两个字符串的大小, 但是忽略大小写.

返回值是整型.

[JAVASE] String类 StringBuffer类 StringBuilder类,Java中的String、StringBuffer与StringBuilder类详解 第3张

结果为:  >     

p compareTo重写了 Comparable 接口中的抽象方法./p pimg alt="" height="199" src="https://img-blog.csdnimg.cn/direct/06a6df238df94990965bda2523deb570.png" width="418" //p p compareToIgnoreCase 本质上调用的是 Comparator接口中的compare方法./p pimg alt="" height="81" src="https://img-blog.csdnimg.cn/direct/88e08044e657436581306e99e44c1e64.png" width="557" //p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.3%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%9F%A5%E6%89%BE%E6%96%B9%E6%B3%95"        1.3 字符串中的查找方法/h3 h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.3.1%20charAt%C2%A0"                1.3.1 charAt /h4 blockquote p charAt 返回的是字符串中指定下标的字符.(char)/p p返回值是 char字符类型/p /blockquote blockquote pimg alt="" height="89" src="https://img-blog.csdnimg.cn/direct/b7b18ed5d72448889e291a3be2e5445e.png" width="518" //p p结果为: 字符b/p p需要知道的是: 字符串中没有下标, 本质上是 value 字符数组中对应的下标./p /blockquote h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.3.2%20indexOf%20%E4%B8%8E%20lastIndexOf"          1.3.2 indexOf 与 lastIndexOf/h4 blockquote pindexOf: 是从前往后找/p plastIndexOf: 从后往前找/p p返回值是整形, 下标, 没有找到时返回 -1./p /blockquote blockquote pimg alt="" height="174" src="https://img-blog.csdnimg.cn/direct/d4c7165c6ecb44ae9e7bbd682faee5ef.png" width="810" / 结果为:  2    0     2/p p这两个方法 也支持在一定范围内查找./p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.4%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E8%BD%AC%E6%8D%A2%E6%96%B9%E6%B3%95"        1.4 字符串中的转换方法/h3 h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.4.1%20valueOf"                1.4.1 valueOf/h4 blockquote pString.valueOf(): 将其他类型的数据转换为字符串, 返回值是字符串./p /blockquote blockquote pimg alt="" height="153" src="https://img-blog.csdnimg.cn/direct/db5443c57e7f4c95af280fbb5551c965.png" width="642" / 结果是: 1001      9.91/p pvalueOf这个方法, 前面的类是表示什么类型的, 就是将后面的数据转换为什么类型./p /blockquote h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.4.2%20toUpperCase%20%E4%B8%8E%20toLowerCase"                1.4.2 toUpperCase 与 toLowerCase/h4 blockquote p toUpperCase: 将小写字母转换为大写字母./p p toLowerCase: 将大写字母转换为小写字母./p /blockquote blockquote pimg alt="" height="136" src="https://img-blog.csdnimg.cn/direct/ec16e40c9a954bc6bbe709b890649286.png" width="438" //p p结果是: NMBG11      nmbg22/p p只转换字母, 其他字符不变./p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.5%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%A0%BC%E5%BC%8F%E5%8C%96%C2%A0"        1.5 字符串的格式化 /h3 blockquote pformat方法: 将字符串格式化, 返回值是一个字符串.                 /p /blockquote blockquote pimg alt="" height="82" src="https://img-blog.csdnimg.cn/direct/4ad955bdf8c944e1970243a2b74b5531.png" width="804" / 结果是: 2024年5月28日/p p类似于 System.out.printf() 方法./p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.6%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%9B%BF%E6%8D%A2%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0"        1.6 字符串的替换        /h3 h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.6.1%20replace"                1.6.1 replace/h4 blockquote p replace: 以指定内容来替换字符串中全部的指定内容. (字符串, 字符都可以)/p p返回值是字符串/p /blockquote blockquote pimg alt="" height="144" src="https://img-blog.csdnimg.cn/direct/bca4eccdb3cb4286b43fda3bac732865.png" width="916" / 结果为: CSDN11     hmbg11/p p 支持 字符串替换字符串, 字符替换字符./p /blockquote h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.6.2%20replaceFirst%20%E4%B8%8E%20replaceALL%C2%A0"                1.6.2 replaceFirst 与 replaceALL /h4 blockquote p replaceFirst: 以指定内容来替换字符串中第一次出现的指定内容. (只能字符串)/p p replaceAll: 以指定内容来替换字符串中全部的指定内容. (只能字符串)/p p返回值都是字符串./p /blockquote blockquote p img alt="" height="135" src="https://img-blog.csdnimg.cn/direct/f89be051128048f89cf5e9b592471285.png" width="977" //p p结果为: hahaabcabcd      hahahahachahacd/p p注意: replaceFirst 与 replaceAll 都是只能够替换字符串/p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.7%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%86%E5%89%B2"        1.7 字符串的分割/h3 blockquote p split: 根据指定内容来分割字符串. 返回值是 字符串数组./p /blockquote blockquote pimg alt="" height="127" src="https://img-blog.csdnimg.cn/direct/1319f8b999624d16856e33ef66ea79aa.png" width="344" //p p结果是: hello   w   orld (一个个字符串)./p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A01.8%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%88%AA%E5%8F%96%C2%A0"         1.8 字符串的截取 /h3 blockquote psubstring: 截取指定区间内的字符串, 返回值是字符串. (注意前闭后开区间)        /p /blockquote blockquote pimg alt="" height="77" src="https://img-blog.csdnimg.cn/direct/a0969baa80c74d84826e6ef8e6900537.png" width="480" //p p结果是: mbg   (前闭后开区间)/p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.9%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%B8%85%E9%99%A4"        1.9 字符串的清除/h3 blockquote p trim: 清除字符串左右两边的空格, 返回值是字符串./p /blockquote blockquote pimg alt="" height="71" src="https://img-blog.csdnimg.cn/direct/7a8b06c76f2a43c0915bba8ec4cc43c2.png" width="466" //p p结果是:  nm   bg  11 (两边没有空格)/p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%201.10%20%E5%B0%8F%E6%80%BB%E7%BB%93%20(%E9%87%8D%E8%A6%81)"        1.10 小总结 (重要)/h3 blockquote pString类中的 方法, 凡是涉及到需要修改原字符串内容的, 都是生成了一个新的字符串. /p /blockquote hr / h2 id="%E4%BA%8C.%20StringBuffer%E7%B1%BB"二. StringBuffer类/h2 h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%202.1%20StringBuffer%E7%B1%BB%E7%9A%84%E8%AF%B4%E6%98%8E%C2%A0%C2%A0"        2.1 StringBuffer类的说明  /h3 blockquote pStringBuffer类定义的字符串是可变的, 直接对原字符串进行修改. /p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%202.2%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%8F%92%E5%85%A5"        2.2 字符串的插入/h3 h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%202.2.1%20insert"                2.2.1 insert/h4 blockquote pinsert: 在字符串中的指定位置插入字符串, 对原字符串进行了修改./p p返回值是 StringBuffer类型. /p /blockquote blockquote pimg alt="" height="87" src="https://img-blog.csdnimg.cn/direct/00d28a4857c04ad28891db715052b352.png" width="568" //p p结果是: hellonmbg11     hellonmbg11/p p可以发现, 原字符串真的发生的改动./p /blockquote h4 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%202.2.2%20append"                2.2.2 append/h4 blockquote p append: 在原字符串末尾插入指定内容, 尾插./p pimg alt="" height="208" src="https://img-blog.csdnimg.cn/direct/64e01452ab6c45f899ea3fd0a9e28892.png" width="295" //p p 返回值是 StringBuffer类型./p /blockquote blockquote pimg alt="" height="85" src="https://img-blog.csdnimg.cn/direct/3c6dc826471c49059edffbfb92bf031b.png" width="523" //p p结果是: hellonmbg11     hellonmbg11/p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%202.3%C2%A0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%C2%A0"        2.3 字符串的删除 /h3 blockquote p delete: 删除原字符串中指定区间内中的内容, 返回值是StringBuffer类型./p /blockquote blockquote pimg alt="" height="94" src="https://img-blog.csdnimg.cn/direct/e3777ecbaca74efb9bd55a45c433765c.png" width="768" //p p结果是: heo  /p p前闭后开区间/p /blockquote h3 id="%C2%A0%20%C2%A0%20%C2%A0%20%C2%A0%202.4%20StringBuffer%E7%B1%BB%E5%9E%8B%20%3D%3D%3E%20String%E7%B1%BB%E5%9E%8B"        2.4 StringBuffer类型 ==> String类型

toString 方法: 将StringBuffer类型的字符串 转换为 String类型的字符串. 

返回值是 String类型.

 [JAVASE] String类 StringBuffer类 StringBuilder类,Java中的String、StringBuffer与StringBuilder类详解 第4张

结果是: hello (String类型)

        2.5 小总结 

a. StringBuffer定义的字符串 直接在原字符串上进行修改. 

b. StringBuffer 用于多线程. (后面会讲到)


 三.StringBuilder类

        3.1 StringBuilder类的说明 

 StringBuilder类定义的字符串是可变的, 直接在原字符串上修改. 

        3.2 StringBuilder类中的常用方法 

StringBuilder中的大多数方法与StringBuffer中的方法是一致的, 用法也一致. 

        3.3 小总结 

 a. StringBuilder定义的字符串 直接在原字符串上进行修改. 

 b. StringBuilder 用于单线程 (后面会讲到).


四. 总结 

a. String类定义的字符串是不可变的, 凡是涉及到修改字符串的, 都是生成了一个新的字符串.

b. StringBuffer类 和 StringBuilder类定义的字符串是可变的, 直接在原字符串上修改. 

c. StringBuffer类 用于多线程.

d. StringBuilder类 用于单线程.


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码