StringBuffer类
字符串的组成原理就是通过该类实现的
StringBuffer可以对字符串内容进行增删
StringBuffer是一个容器
很多方法和String相同
一、特点
StringBuffer字符串缓冲区,用于存放数据的容器
1.可变长度的
2.可以存储不同的数据类型
3.最终要转成字符串进行使用
4.对字符串进行修改
容器的特点:
1.添加
append(data)
insert(index,data);
2.删除
StringBuffer delete(int start,int end)//含头,不含尾
deleteCharAt(int index)
移除此序列指定位置的 char
。//
3.查找
char charAt(index)
int indexOf(string)
int lastindexOf(string)
4.修改
StringBuffer replace(start,end,string)
void setcharAt(intdex,char)
CURD(增删改查)
5.其他
setlength(data)
reseve 将字符串反转
public class Main {
public static void main(String[] args) {
//StringBufferDemo();//添加
//StringBufferDemo_1();
StringBufferDemo_2();//删除
StringBufferDemo_3();//修改
}
public static void StringBufferDemo()
{
StringBuffer SB = new StringBuffer();
StringBuffer S1 = SB.append(4);
System.out.println(SB);
System.out.println(S1);
System.out.println(SB == S1);
S1 = SB.append(true).append("nihao");
System.out.println(SB);
SB.insert(1, "hehe");//在1的位置添加“hehe”
System.out.println(SB);
}
public static void StringBufferDemo_1()
{
StringBuffer SB = new StringBuffer("qwer");
SB.insert(2, 5);//qw5er
System.out.println(SB);
}
public static void StringBufferDemo_2()
{
StringBuffer SB = new StringBuffer("qwer");
SB.deleteCharAt(2);//删除一个
SB.delete(1, 3);
//清除
SB.delete(0, SB.length());
System.out.println(SB);
}
public static void StringBufferDemo_3()
{
StringBuffer SB = new StringBuffer("qwert");
SB.replace(0, 3, "aaaaaaa");
System.out.println(SB);
SB.setCharAt(2, 'g');//注意是void
SB.setLength(2);
System.out.println("SB = "+SB);//如果设置的长度超过字符串本身,超出部分用空白填充
System.out.println("LEN = "+SB.length());
SB.reverse();//反转字符串
System.out.println(SB);
}
}
构造方法:StringBuffer()
构造一个不带字符的字符串缓冲区,初始容量为16
可变长度数组
往数组里存数据,当存不下的时候,会自动开辟一个新数组,新书组的长度一般是原数组的1倍左右,然后将原数组的数组复制过来,再继续进行新数据的存放,注意效率问题
二、StringBuilder类
实际上和StringBuffer一回事
严重的区别就是:诞生时间不一样
StringBuffer:保证同步,线程安全(JDK1.0):通常用于多线程
StringBuilder:不保证同步(JDK1.5):通常用于单线程,它的出现为了提高效率
应该优先使用StringBuilder,由于它不保证同步,所以效率高
class StringBuffer
{
Object obj = new Object();
public StringBuffer append()
{
synchronized (obj) {
}
}
public StringBuffer delete()
{
synchronized (obj) {
}
}
.....
}
加一次判断锁一次,所以效率低
三、练习:
public class Main {
public static void main(String[] args)
{
int[] arr = {1,2,3,4,5,6,7,8,9};
String str = ArryToString(arr);
System.out.println("str : "+str);
}
/*将int数组变为字符串*/
public static String ArryToString(int[] arr)
{
//String str = "[";
StringBuilder str = new StringBuilder();
str.append("[");
for (int i = 0; i < arr.length-1; i++) {
//str += arr[i] + ",";//一旦字符串常量池没有“,”,就要在字符串常量池 产生,所以尽量用StringBuilder
str.append(arr[i]+",");
}
//str += arr[arr.length-1]+"]";
str.append(arr[arr.length-1]+"]");
return str.toString();
}
}