StringBuffer的常用方法及相关面试题

StringBuffer

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

效率:String<StringBuffer<Stringbuilder;

StringStringBuffer的区别:

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.StringBufferString的相互转换

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.StringbufferStringBulider的区别:

StringBuffer是jdk1.0版本的,线程安全,效率低

StringBuffer是jdk1.5版本的,线程不安全,效率高

2.String.StringBufferStringBulider的区别:

String是一个不可变的字符序列;

StringBuffer和StringBulider:是可变的字符序列;

 

posted @ 2017-06-22 22:54  懒人写博客  阅读(431)  评论(0编辑  收藏  举报