String字符串缓冲区
1、StringBuffer类
StringBuffer又称为可变字符序列,字符串缓冲区支持可变的字符串,
StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
2、StringBuffer的方法使用
构造方法:
常用方法:
代码演示:
StringBuffer sb = new StringBuffer(); sb.append("haha"); //添加字符串 System.out.println(sb);//haha sb.insert(2, "it");//在指定下标位置插入 System.out.println(sb);//haitha sb.delete(1, 4);//删除 包头不包尾(不包含4) System.out.println(sb);//hha sb.replace(1, 4, "cast");//替换指定范围内的内容 System.out.println(sb);//hcast String str = sb.toString();//返回String类 System.out.println(str);//hcast
注意:append、delete、insert、replace、reverse方法调用后,返回值都是当前对象自己,所以说,StringBuffer它可以改变字符序列的长度和内容。
3、StringBuffer类常用法
append(char[] str)----将
char
数组参数的字符串表示形式追加到此序列(StringBuffer)。
capacity() ---- 返回当前容量(返回值int类型)。
delete(int start, int end)-----移除此序列的子字符串中的字符(StringBuffer)。
indexOf(String str)----- 返回第一次出现的指定子字符串在该字符串中的索引(int)。
length() -----返回长度(int)
substring(int start, int end)----返回一个新的
String类型
,包头不包尾。
4、StringBuffer练习
要求:int[] arr = {34,12,89,68};将一个int[]中元素转成字符串 ,格式 [34,12,89,68]
public static String toString_2(int[] arr) { StringBuffer sb = new StringBuffer(); sb.append("["); for (int i = 0; i < arr.length; i++) { if(i!=arr.length-1){ sb.append(arr[i]+","); }else{ sb.append(arr[i]+"]"); } } return sb.toString(); }
无论多少数据,数据是什么类型都不重要,只要最终变成字符串就可以使用StringBuffer这个容器
5、 StringBuilder类
StringBuilder类,也是字符串缓冲区。
String 、StringBuilder和StringBuffer的区别?
1.首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,
即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
String建立对象并赋值后,是不能更改的,当对其添加操作后,是创建了一个新的对象也名为str。所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。
而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
2、再来说线程安全,在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。在单线程的情况下可以使用StringBuilder
3、总结一下
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况