StringBuffer和StringBuilder具有相同的方法和属性,唯一的区别在于,StringBuffer更安全,StringBuilder更快。
StringBuffer是jdk1.0版本的,是线程安全的,效率低
StringBuilder是jdk1.5版本的,是线程不安全的,效率高
String是一个不可变的字符序列
StringBuffer,StringBuilder是可变的字符序列
默认长度为16,
StringBuffer与String的区别,在于操作字符串的时候,String类型的字符串会重新创建一个新的String来接收,而StringBuffer类型不会重新赋值。
String str = "hello";
String str1 = str.concat("java");
System.out.println(str);//结果为hello,str的值没有被改变
System.out.println(str1);//结果为hellojava,操作值后会被一个新的字符串来接收
StringBuffer sbf = new StringBuffer("hello");
StringBuffer sbf1 = sbf.append("java");
System.out.println(sbf);//结果为hellojava,赋值后不用重新创建新的字符串
System.out.println(sbf1);//结果为hellojava
append(String str)
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
StringBuffer sb = new StringBuffer("abc");
sb.append("123");
System.out.println(sb);//结果为abc123
capacity()
返回StringBuffer的容量,容量和长度是两个概念,比如说:一瓶水的容量是1000毫升,但只装了500毫升的水。这瓶水的容量就是我们所说的字符串缓冲区的容量,500毫升就相当于目前这个字符串缓冲区里面的字符串的长度。
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = new StringBuffer("abcd");
System.out.println(sb.length());//sb的长度是0
System.out.println(sb.capacity());//sb的容器是16
System.out.println(sb1.length());//sb1的长度是4
System.out.println(sb1.capacity());//sb1的容器是20
substring(int start)
从指定位置截取到末尾
substring(int start,int end)
截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注意:返回值类型将不再是StringBuffer本身,而是String
StringBuffer sb = new StringBuffer("abcde");
String str1 = sb.substring(3); //返回值类型不再是StringBuffer,而是String
System.out.println(str1); //结果为de
String str2 = sb.substring(0, 3);
System.out.println(str2); //结果为abc
delete(int a,int b)
删除下标a到下标b-1的字符(含头不含尾45)
StringBuffer sb = new StringBuffer("0123456");
sb.delete(3, 5);
System.out.println(sb);//结果为01256
deleteCharAt(int index)2145145141
删除指定下标的字符
StringBuffer sb = new StringBuffer("0123456");
sb.deleteCharAt(3);
System.out.println(sb);//结果为012456
insert(int index,String str)
在指定下标处添加字符串,添加的字符串在指定的下标前面
StringBuffer sb = new StringBuffer("abc");
sb.insert(2, "5");
System.out.println(sb);//结果为ab5c
replace(int start,int end,String str)
替换,从start开始到end用str用str替换(含头不含尾)
StringBuffer sb = new StringBuffer("abcde");
sb.replace(0, 3, "123");
System.out.println(sb); //结果为123de
reverse()
字符串反转
StringBuffer sb = new StringBuffer("123456");
sb.reverse();
System.out.println(sb);//结果为654321
setCharAt(int index,char ch)
在指定的下标处替换字符
StringBuffer sb = new StringBuffer("abcde");
sb.setCharAt(3, '5');
System.out.println(sb);//结果为abc5e
trimToSize()
改变字符串缓冲区的容量。比如说一个1000毫升的瓶子装了100毫升的水,我把这个1000毫升的瓶子换成了300毫升,照样可以装这个100毫升的水。同理,trimToSize()改变的是缓冲区的容量,没有改变长度。
System.out.println(sb.length());//原始长度是5
System.out.println(sb.capacity());//容量是20
sb.trimToSize();//缩小容量
System.out.println(sb.length());//原始长度还是5
System.out.println(sb.capacity());//缩小后的容量变为5
setLength(int len)
改变字符串的长度,如果len大于原始长度,则自动加上空格,如果len小于原始长度,则删除掉多余的长度
StringBuffer sb = new StringBuffer("123456789");
System.out.println(sb.length());//原始长度
sb.setLength(12);//增加字符串的长度
System.out.println(sb);//改变长度后的字符串的值是"123456789 ",后面多余的格是自动加上去的
sb.setLength(6);//减少字符串的长度
System.out.println(sb);//改变长度后的字符串的值是"123456",删除多余的长度
StringBuffer和String的相互转换
String转换成StringBuffer
-
通过StringBuffer的构造方法
-
通过append()方法
StringBuffer转换成String
-
通过String的构造方法
-
通过toString()方法
-
通过subString(0,length)方法