StringBuffer
StringBuffer类概述:
线程安全的可变字符串
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象 既耗时,又浪费空间,而StringBuffer就可以解决这个问题
StringBuffer和String的区别?
前者长度和内容可变,后者不可变。
如果使用前者做字符串的拼接,不会浪费太多的资源
构造方法:
public StringBuffer()
无参构造
public StringBuffer(int capacity)
指定容量 的字符串缓冲区对象
public StringBuffer(String str)
指定字符串内容的字符串缓冲区对象
添加功能;
public StringBuffer append(String str)
注意:可以把任意类型数据添加到字符串缓冲区里面
并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str)
在指定位置把任意类型的数据插入到字符串缓冲区里面
并返回字符串缓冲区本身
删除功能:
puclic StringBuffer deleteCharAt(int index)
删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end)
删除指定位置开始,指定位置结束的内容,并返回本身
替换功能:
public StringBuffer replace(int start,int end,String str)
从start开始到end结束,用str替代
反转功能:
public StringBuffer reverse()
截取功能:注意 这里返回的是一个字符串,而不是字符串缓冲区
public String substring(int start)
public String substring(int start,int end)
我们把A转换为B,其实是为了使用B的功能
B---A的转换,是因为我们要的结果是A类型,所以还得转回来
String和StringBuffer之间的转换
String转StringBuffer有两种方法:
方式1,通过构造方法 //选这种
String s = "hello";
StringBuffer sb = new StringBuffer(s);
方式2.通过append()方法
StringBuffer sb = new StringBuffer();
sb.append(s);
StringBuffer转String
方式1:通过构造方法
StringBuffer buffer = new StringBuffer("java");
String s = new String(buffer);
方式2.通过toString方法 //选这种
String s = buffer.toString()
/*
*
* 需求,给定一个数组,int [] arr = {44,33,55,66,88};
* 变成[44, 33, 55, 66, 88]
*
* */
public class PinJie {
public static void main(String[] args) {
int [] arr = {44,33,55,66,88};
String str = pinjie(arr);
System.out.println("拼接后的字符串为:"+str);
}
public static String pinjie(int[] arr)
{
StringBuffer buffer = new StringBuffer();
buffer.append("[");
for(int i =0;i<arr.length;i++)
{
if(i == arr.length-1)
{
buffer.append(arr[i]);
}
else
{
buffer.append(arr[i]).apped
(",").append(" ");
}
}
buffer.append("]");
return buffer.toString();
}
}
/*
*
* 利用StringBuffer做拼接,与利用String做拼接的效率要高很多,因为StringBuffer始终都是一个
* 而String不一样,它每次拼接都会创造一个新的String对象,浪费内存
* */
*/
面试题:
1.String,StringBuffer,StringBuilder的区别?
String内容不可变,而StringBuffer,StringBuilder都是内容可变的
StringBuffer是同步的,数据安全,效率低,StringBuilder是不同步的,数据不安全,效率高
2.StringBuffer和数组的区别?
二者都可以看做是一个容器,装其他的数据
但是呢,StringBuffer的数据最终是一个字符串数据
而数组可以放置很多数据,但是必须是同一种类型的数据