首页 > 代码库 > JAVA学习第三十一课(常用对象API)- StringBuffer类&&StringBuilder类

JAVA学习第三十一课(常用对象API)- StringBuffer类&&StringBuilder类

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();
		
	}
}




JAVA学习第三十一课(常用对象API)- StringBuffer类&&StringBuilder类