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