String、StringBuilder、StringBuffer和StringJoiner的区别以及使用

一、String、StringBuilder和StringBuffer的区别:

//String:"不可变"字符串

//StringBuilder:"可变"字符串

//StringBuffer:"可变"字符串

二、StringBuilder和StringBuffer的区别:

相同点:
//都是可变字符串,都继承自AbstractStringBuilder父类
//区别点:
//StringBuilder:线程不安全(每个方法没有加synchronized锁),性能好
 //StringBuffer:线程安全(每个方法都加synchronized锁),性能差不推荐使用

三、String

String ret="A"+"B"+"C";  

这句代码实现时。虽然输出结果是“ABC”,但是其实在内部产生了三个字符串,分别是 “A”,"AB","ABC",即每一次拼接都会产生一个新的字符串对象,这样在进行频繁的拼接时非常占用空间,还会影响效率

四、StringBuilder

因此,在进行频繁的字符串拼接时,应该选择“可变字符串”:StringBuilder,StringBuilder是可变的对象,可以预分配缓冲区,这样在StringBuilder中新增字符时,不会创建新的临时对象

创建1个可变字符串

方法一:内部的char[]字符数组采用默认容量16

StringBuilder s1=new StringBuilder();

StringBuilder 

方法二:内部的char[]字符数组采用指定容量256

StringBuilder s2=new StringBuilder(256);

方法三:内部的char[]字符数组采用指定字符串长度+16

StringBuilder s3=new StringBuilder("A");

StringBuilder的应用

StringBuilder可以进行链式操作,即

1.append():追加字符串

用append()方法直接向当前字符串s3的尾部追加字符串,将处理后的结果存会回原对象,不会产生新的字符串

StringBuilder s3=new StringBuilder("A");
s3.append("B")
  .append("C")
  .append("D");
System.out.println(s3);

输出结果:ABCD

2.insert():插入字符串

用insert()方法直接在s3指定位置插入,将处理后的结果存会回原对象,不会产生新的字符串

StringBuilder s3=new StringBuilder("ABCD");
s3.insert(0,"a");
System.out.println(s3);

输出结果:aABCD

3.delete():删除字符串

用delete()方法直接删除指定位置的元素,将处理后的结果存会回原对象,而不会产生新对象

StringBuilder s3=new StringBuilder("aABCD");
s3.delete(0,1)//删除[0,1),即第一位
s3.delete(0,2)删除[0,2),即第一位和第二位
System.out.println(s3);

输出结果:CD

五、String和StringBuilder的使用对比

String类型的对象s在进行替换时,每替换一次都会产生一个临时的字符串。StringBuilder的对象sb直接在他自己的原串上进行替换

//将空格替换为%20
String s="just do it";
//方法一:String的replace()方法
String ret=s.replace(" ","20%");
//方法二:StringBuilder的replace()方法
//创建一个StringBuilder对象sb,将s的内容存入sb
StringBuilder sb=new StringBuilder(s);
int index=-1;
//如果sb中存在空格,将其下标赋值给index,存在则index>0,若不存在则跳出循环
while((index=sb.indexOf(" "))>0){
    sb.reolace(index,index+1,"20%");
}
System.out.println(ret);
System.out.println(sb);

六、StringJoiner

//下述例子分别使用String、String.join()、StringBuilder和StringJoiner实现将:cityArr拼接成{"西安","宝鸡","咸阳"}

String[] cityArr= {"西安","宝鸡","咸阳"};
//1.使用String.join()拼接
String ret1=String.join(",",cityArr);
ret1="{"+ret1+"}";
System.out.println("ret1:"+ret1);
//2.使用StringBuilder()
System.out.println("ret:"+Arrays.toSting(cityArr));
//3.使用StringJoiner()
//设置分隔符
StringJoiner joiner1 =new StringJoiner(",");
for(String cityName1:cityArr) {
	joiner1.add(String.format("\"%s\"", cityName1));
}
String ret2=joiner1.toString();
System.out.println(ret2);
//设置分隔符、左右关闭符号(开始符号和结束符号)
StringJoiner joiner2=new StringJoiner(",","{","}");
for(String cityName:cityArr){
//设置各元素的双引号
    joiner2.add(String.format("\"%s\"",cityName));
}
String ret3=joiner2.toString();
System.out.println("ret2:"+ret2);
System.out.println("ret3:"+ret3);

//输出结果:

ret1:{西安,宝鸡,咸阳}
ret:[西安, 宝鸡, 咸阳]
ret2:"西安","宝鸡","咸阳"
ret3:{"西安","宝鸡","咸阳"}

//所以可以看出,用StringJoiner和String.join()可以使用指定分隔符拼接字符串数组,但是StringJoiner可以额外附加一个”开头“"结尾"

相关推荐

  1. mybatis中$#区别以及各自使用场景

    2024-01-25 19:10:01       35 阅读
  2. nslookupdig命令使用方法以及区别

    2024-01-25 19:10:01       36 阅读
  3. StringBuilderStringjoiner

    2024-01-25 19:10:01       50 阅读
  4. String StringBuffer StringBuilder StringJoiner区别

    2024-01-25 19:10:01       42 阅读
  5. PullPush关系以及区别

    2024-01-25 19:10:01       33 阅读
  6. Vue3 Vue2区别以及钩子函数使用

    2024-01-25 19:10:01       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 19:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 19:10:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 19:10:01       82 阅读
  4. Python语言-面向对象

    2024-01-25 19:10:01       91 阅读

热门阅读

  1. Scikit-Learn 中级教程——模型融合

    2024-01-25 19:10:01       55 阅读
  2. C语言题型归纳

    2024-01-25 19:10:01       41 阅读
  3. modelsim vlog option

    2024-01-25 19:10:01       42 阅读
  4. MySQL之数据库DML

    2024-01-25 19:10:01       56 阅读
  5. 寒假刷题第14天

    2024-01-25 19:10:01       61 阅读
  6. ZCC575数字温度传感器替代lm75

    2024-01-25 19:10:01       53 阅读
  7. 【蓝桥备赛】最大数组和——前缀和

    2024-01-25 19:10:01       67 阅读
  8. Oracle 日常健康脚本

    2024-01-25 19:10:01       43 阅读
  9. Golang内存逃逸引发的面试考察点

    2024-01-25 19:10:01       65 阅读
  10. Flutter Image库详细介绍与使用指南

    2024-01-25 19:10:01       62 阅读
  11. 【ceph】ceph关于清洗数据scrub的参数分析

    2024-01-25 19:10:01       61 阅读