字符串StringBuilder、StringBuffer,工具StringJoiner

  • 一、概述
  • 二、StringBuilder
  • 三、StringBuffer
  • 三、StringBuilder 、StringBuffer相关方法:
    • 1、append
    • 2、delete
    • 3、insert
    • 4、setCharAt
    • 5、deleteCharAt
  • 五、StringJoiner
    • 1、add(CharSequence newElement)
    • 2、merge(StringJoiner other)

一、概述

  • 字符串在编程过程中十分重要,操作字符串是我们程序员的必备技能,并且在自然语言处理中具有重要地位。
  • 我们注意到,String字符串本质是一个常量数组。(jdk1.8以前是字符数组char[],jdk1.8以前是字节数组byte[],详情请见前篇文章:【Java基础——字符串 String】概述、相关方法.)
  • 常量字符串String每次使用"new"关键字,都会在堆区创建新的对象,使得内存空间得不到有效地利用。
  • 变量字符串StringBuilder应运而生,解决了这个问题,它会直接对对象进行修改而不会生成新的对象。
  • StringBuilder 和 StringBuffer几乎拥有String的所有常用方法,我们在这里不做赘述。(如有需要,详情请见前篇文章)
  • CharSequence接口代表该接口代表类型为字符串,而String、StringBuilder、StringBuffer均实现了该接口(其关系如下图所示)。

  • CharSequence接口拥有三个固有方法,实现该接口的三种字符串类均实现了这些方法:
    ① 获取指定索引的字符:public char charAt​(int index);
    ② 获取字符串长度:public int length​();
    ③ 截取部分字符串:public CharSequence subSequence​(int start, int end);

二、StringBuilder

  • StringBuilder具有强大的字符串操作功能,我们可以利用它对字符串进行更好的拼接、重组。
  • StringBuilder位于lang包下,可以直接使用,无需导包。


可以看到,StringBuilder继承了AbstractStringBuilder类,而在该类中定义的value(本质)为可变数组,同样为字节数组byte[]。

三、StringBuffer

  • StringBuffer主要是为了线程安全而存在的,它具有与StringBuilder相同的功能。
  • StringBuffer位于lang包下,可以直接使用,无需导包。

    可以看到,StringBuffer同样继承了AbstractStringBuilder类,所以它的本质同样为可变数组。

三、StringBuilder 、StringBuffer相关方法:

  • StringBuffer相关方法的使用与StringBuilder 大同小异,这里我们以StringBuilder 为例。
  • 我们定义StringBuilder 对象 stringBuilder:
StringBuilder stringBuilder;

1、append

  • append 方法用于在字符串尾部追加其他类型的值,如int、char、float、double、long、boolean、char[]、String等,并作为参数传入。
  • 不同于concat方法生成新字符串,append会修改原字符串,但它还是可以返回一个修改后的字符串。

在原字符串上做修改:

  • append 的用法如下:
StringBuilder stringBuilder = new StringBuilder("I");
stringBuilder.append(new char[] {' ','l','o','v','e'});
stringBuilder.append(" ");
stringBuilder.append('U');
stringBuilder.append(".The dream is not ");
stringBuilder.append(true);
stringBuilder.append(",but the love is.");
stringBuilder.append("\n");
stringBuilder.append(521);
stringBuilder.append(" ");
stringBuilder.append(13.14);
System.out.println(stringBuilder);

运行结果如下:

接收返回的StringBuilder 对象:

StringBuilder stringBuilder = new StringBuilder("He");
StringBuilder myString = stringBuilder.append("llo");    //接收返回的新StringBuilder对象
System.out.println(stringBuilder);                      //打印原StringBuilder对象
System.out.println(myString);                           //打印新的StringBuilder对象

运行结果如下:

可以看到,获得了相同的结果。

2、delete

  • delete 方法用于删除字串,须指定始末位置的索引,作为参数传入;适用于删除整个范围内的字串。
  • 与append类似。它同样会修改原字符串,但它还是可以返回一个修改后的字符串。
  • delete 的用法如下:
  • delete 的用法如下:
StringBuilder stringBuilder = new StringBuilder("Helabcdefglo");
StringBuilder myString = stringBuilder.delete(3,10);
System.out.println(stringBuilder);
System.out.println(myString);

3、insert

  • insert 方法用于在指定位置插入其他类型的值,如int、char、float、double、long、boolean、char[]、String等,适用于在已知索引的情况下插入单个字符。
  • 第一个参数为插入位置索引,第二个参数为想要插入的值。
  • 与append、delete类似。它同样会修改原字符串,但它还是可以返回一个修改后的字符串。
  • insert 的用法如下:
StringBuilder stringBuilder = new StringBuilder("Hello, am Mike. to meet you!");
stringBuilder.insert(6,'I');
stringBuilder.insert(16,"Nice");

运行结果如下:

接收返回的StringBuilder 对象:

StringBuilder stringBuilder = new StringBuilder("I  you.");
StringBuilder myString = stringBuilder.insert(2,"love");
System.out.println(stringBuilder);
System.out.println(myString);

运行结果如下:

可以看到,结果相同。

4、setCharAt

  • setCharAt 方法用于修改指定位置的字符,适用于在已知索引的情况下修改改单个字符。
  • 第一个参数为需修改字符的位置索引,第二个参数为修改后的字符。
  • setCharAt是五个方法中,唯一没有返回值的方法,这意味着它只能在原字符串上进行修改。
  • setCharAt 的用法如下:
StringBuilder stringBuilder = new StringBuilder("I lova you.");
stringBuilder.setCharAt(5,'e');
System.out.println(stringBuilder);

运行结果如下:

5、deleteCharAt

  • deleteCharAt 方法用于删除指定位置的字符,适用于在已知索引的情况下删除单个字符。
  • 参数为需修改的字符位置索引为需删除字符的位置索引。
    • 与append、delete、insert类似。它同样会修改原字符串,但它还是可以返回一个修改后的字符串。
  • deleteCharAt 的用法如下:
StringBuilder stringBuilder = new StringBuilder("I lovae you.");
StringBuilder myString = stringBuilder.deleteCharAt(5);
System.out.println(stringBuilder);
System.out.println(myString);

运行结果如下:

五、StringJoiner

  • StringJoiner 位于util包下,所以使用前需要导包,不可直接使用。
  • StringJoiner 依赖StringBuilder实现,性能和StringBuilder差不多,同样也是非线程安全的。
  • StringJoiner 用于。。。

现在我们来介绍其相关方法:

1、add(CharSequence newElement)

  • 可以看到,传入的参数,需实现CharSequence接口(该接口代表类型为字符串),而String、StringBuilder、StringBuffer均实现了该接口,所以均可作为参数传入,并进行处理。
  • add 返回值为StringJoine,我们可以接收它,并生成一个新的StringJoiner对象。



  • add 的用法如下:
StringJoiner sj = new StringJoiner(",","[","]");
//构建字符串
String str = "I";
StringBuilder strBu = new StringBuilder("Love");
StringBuffer strBf = new StringBuffer("you");
//添加字符串
sj.add(str);
sj.add(strBu);
//添加字符串,并接收返回的StringJoiner对象
StringJoiner mySj = sj.add(strBf);
//打印结果
System.out.println(sj);
System.out.println(mySj);

运行结果如下:

2、merge(StringJoiner other)

  • merge 方法用于连接两个StringJoiner 对象,并修改调用该方法的StringJoiner 对象。
  • merge 返回值为StringJoine,我们可以接收它,并生成一个新的StringJoiner对象。
StringJoiner sj = new StringJoiner(",","[","]");
//构建字符串
String str = "I";
StringBuilder strBu = new StringBuilder("Love");
StringBuffer strBf = new StringBuffer("you");
//添加字符串
sj.add(str);
sj.add(strBu);
sj.add(strBf);
//连接StringJoiner对象,并接收返回的StringJoiner对象
StringJoiner mySj = sj.merge(sj);
//打印结果
System.out.println(sj);
System.out.println(mySj);

运行结果如下:

【Java 基础】字符串StringBuilder、StringBuffer,工具StringJoiner相关推荐

  1. Java 集合 --- String, StringBuilder, StringBuffer

    Java 集合 --- String, StringBuilder, StringBuffer String String的声明方式 String的不可变性 对比两个String StringBuil ...

  2. Java基础教程:JavaArrays工具类

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念.Java不但可以用来开发网站后台.PC客户端和AndroidAPP,还在数据分析.网络爬虫 ...

  3. java基础-字符串String

    今天要介绍的知识点为String,也叫字符串.这是个应用的比较广泛并且充满神奇色彩的知识点.为什么说神奇呢?因为它涉及了好些个看起来高深莫测的概念.并且,这个知识点其实已经属于java中引用类型的知识 ...

  4. java基础----String、StringBuffer、StringBuilder

    1.String package com.henu;public class Demo05 {public static void main(String[] args) {/** 字符串是常量:它们 ...

  5. Java基础-String、StringBuffer、StringBuilder的区别

    转载:https://www.cnblogs.com/su-feng/p/6659064.html 转载于:https://www.cnblogs.com/spenserliu/p/9850348.h ...

  6. java 字符串缓冲区_详解Java中字符串缓冲区StringBuffer类的使用

    StringBuffer 是一个线程安全的可变的字符序列.它继承于AbstractStringBuilder,实现了CharSequence接口. StringBuilder 也是继承于Abstrac ...

  7. Java回顾-String/StringBuilder/StringBuffer

    一.String的特点 1.String类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 2.String是一个final类,代表不可变字 ...

  8. frida需要Java基础吗_Android Hook工具之Frida 基础使用

    在上一篇文章Android Hook工具之Frida 安装配置教程 中讲解了如何安装配置Frida工作环境,这篇文章主要讲解一下Frida的基础使用方式. 在运行以下任何命令之前必须先启动手机中的fr ...

  9. JAVA基础-字符串

    一,字符串的声明和赋值: String 变量名 = "ssssss";       注意:声明的字符串必须经过初始化才能使用! 二,字符串的创建: 1.因为java中把字符串作为对 ...

  10. Java基础强化训练——开发工具及输出语句训练

    1:使用IDEA开发一个Java程序建立一个Java应用项目: (1)开发一个类,类名称为Test01,并定义主方法: (2)在主方法中输出一个字符串" 您好!我是XXX." // ...

最新文章

  1. Win8 Metro(C#)数字图像处理--2.52图像K均值聚类
  2. 从编程基础到系统设计,这份数据工程师面试宝典全都有 | 资源
  3. Maximum Product of Word Lengths
  4. 甘肃关于领取软考2021年上半年合格证书的通知
  5. SequoiaDB 巨杉数据库
  6. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
  7. noip模拟赛 遭遇
  8. 用jackson转json_用Jackson编写大JSON文件
  9. halcon识别ocr汉字_手写汉字识别——手写文本快速电子化的好方法
  10. 对话Google全球VP Jay Yagnik:TensorFlow2.0会强化可控性
  11. 华为实习面经(技术面+主管面)
  12. sql2000 挂起 注册表
  13. 【OI做题记录】【BZOJ】【Usaco2008 Mar】土地购买
  14. 公路广告牌问题(Highway Billboard Problem)--动态规划
  15. mysql数据库之ddl语句盘点
  16. 市场渐冷,交易所拉锯战愈烈,牛熊无阻,我在乌镇等你
  17. 用Arduino实现跨年倒计时
  18. docker开放端口
  19. 【报告分享】2021上半年移动广告流量观察白皮书-APP GrowingMob研究院七麦数据(附下载)
  20. iOS:如何在xcode设置app图标打包项目ipa

热门文章

  1. java io处理_java之IO处理
  2. 每个工程师都应该知道的事——射频发射机功率怎么测量
  3. 网易Java开发岗面试分享
  4. CRC校验原理的完整学习
  5. ueditor 配置window.UEDITOR_HOME_URL路径不起作用,提示引用不到该路径,引用的确是另一个项目路径
  6. Windows自带远程桌面和远程协助用法
  7. Linux上下文切换[转]
  8. 印象笔记,幕布, Effie 哪个适合公众号主?
  9. C语言、Java语言、JavaScript语言的区别
  10. 大厂对软件测试的误解这么深吗?测试岗会越来越少吗?该怎样提升技术?