StringBuffer的常用方法及相关面试题
StringBuffer类
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
效率:String<StringBuffer<Stringbuilder;
String和StringBuffer的区别:
String是一个不可变的字符序列,一旦声明赋值不可改变
StringBuffer是一个可变的字符序列;赋值后可以改变,通过他的方法改变;
一.构造方法
1.StringBuffer();
构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer sb = new StringBuffer();
//新建一个StringBuffer;
System.out.println(sb.length());
//容器中字符个数;实际值,未装元素时,打印出来的值为0;
System.out.println(sb.capacity());
//容器的初始容量,理论值,默认为16
2.public StringBuffer(int capacity)
构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer sb = new StringBuffer(10);
//新建一个StringBuffer,并给定长度为10
System.out.println(sb.length());
//容器中字符个数;实际值,未装元素时,打印出来的值为0;
System.out.println(sb.capacity());
//容器的初始容量,理论值,默认为16,但是这里给定长度为10
3.public StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。该字符串的初始容量为 16 加上字符串参数的长度。
StringBuffer sb = new StringBuffer(“heima”);
//新建一个StringBuffer,并给定长度为10
System.out.println(sb.length());
//容器中字符个数;实际值,现在打印出来为5
System.out.println(sb.capacity());
//容器的初始容量,理论值,现在打印出来为21,sb.length()+16
二.StringBuffer的方法
1.StringBuffer的追加功能
1.append()
可以把任意类型的数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
StringBuffer sb = new StringBuffer();
System.out.println(sb);
//StringBuffer 里面重写了toString方法,因为打印出来的值不是hascode值;
StringBuffer sb1 = sb.append(“heima”);
//将”heima”追加到sb缓冲区,并把地址赋值给sb1;
StringBuffer sb2 = sb.append(100);
//将100追加到sb缓冲区,并把地址赋值给sb2;
sb.append(“heima”);//直接追加字符串
Sb.append(100);//直接追加数字
2.intsert(int index,String str)
这里的String str,可以换成任意类型的数据
例1:StringBuffer sb = new StringBuffer();
sb.insert(5,”heima”); //在指定位置添加元素
System.out.println(sb); //因为缓存区现在无元素,没有第五个索引,所以 会报索引越界异常
例2:StringBuffer sb = new StringBuffer(1234);
sb.insert(3,”heima”);
System.out.println(sb);//输出结果为:123heima4
2.StringBuffer的删除功能
1.deleteCharAt(int index);
删除指定索引的元素
例1:StringBuffer sb = new StringBuffer();
sb.deleteCharAt(5); //删除第五个索引的元素,缓冲区根本没有元 素,删除时会报索引越界异常
System.out.println(sb);
例2:StringBuffer sb = new StringBuffer(“heima”);
Sb.deleteCharAt(3); //删除索引为3的元素
System.out.println(sb); //打印出来为heia
2.delete(int start,int end)
删除指定位置开始到指定位置结束的元素,并返回本身.
StringBuffer sb = new StringBuffer(“heima”);
sb.delete(0,2); //删除索引为0,1的元素,包含头,不包含 尾;(>0&&<sb.length)
System.out.println(sb); //ima
Sb.delete(0,sb.length());//清空缓存区
3.StringBuffer的替换和反转功能
1.replace(int start,int end,String str)
从start开始到end用str替换.
StringBuffer sb = new StringBuffer(“heima”);
sb.replace(0,3,”bai”); //从0索引开始到3索引用bai替换, 包含0索引,不包含3索引
System.out.println(sb); //打印结果为baima
2.reverse();
字符串反转
StringBuffer sb = new StringBuffer(“heima”);
Sb.reverse();
System.out.println(sb); //打印结果为amieh
4.StringBuffer的截取功能
1.substring(int strat);
从指定位置截取到末尾;
StringBuffer sb=new StringBuffer(“woaiheima”)
String str=sb.substring(4); //从索引4开始截取
System.out.println(str); //打印出heima
2.substring(int start,int end);
截取从指定位置开始到指定结束位置,包括开始位置,不包括结束位置
StringBuffer sb=new StringBuffer(“woaiheima”)
String str=sb.substring(4,7); //从索引4开始截取到索引7 结束,不包含索引7的元素
System.out.println(str); //打印出hei
5.StringBuffer和String的相互转换
1.String----StringBuffer
1通过构造方法;
StringBuffer sb=new StringBuffer(“woaiheima”)
System.out.print(sb);
2通过append()方法
StringBuffer sb=new StringBuffer(“woaiheima”)
sb.append(“你好”)
System.out.print(sb); //输出woaiheima你好
2.StringBuffer---String
1通过构造方法;
StringBuffer sb=new StringBuffer(“woaiheima”)
String str = new String(sb);
System.out.println(str);
2通过toString方法;
StringBuffer sb=new StringBuffer(“woaiheima”)
System.out.println(sb.toString());
3通过substring(0,length())方法;
StringBuffer sb=new StringBuffer(“woaiheima”)
String str = sb.substring(0,sb.length());
System.out.println(str);
6.面试题
1.Stringbuffer和StringBulider的区别:
StringBuffer是jdk1.0版本的,线程安全,效率低
StringBuffer是jdk1.5版本的,线程不安全,效率高
2.String.StringBuffer和StringBulider的区别:
String是一个不可变的字符序列;
StringBuffer和StringBulider:是可变的字符序列;