StringBuffer
字符串缓冲区,是一个容器(当返回到的是String时而且长度不确定,数据类型不确定时就可以用StringBuffer)
其实底层还是数组,只是被封装了,对外提供了方法,初始容量为16个字符
特点:长度是可变化的(底层实际是不断的new数组) 可以直接操作多个数据类型 最终会通过toString方法变成字符串 可以对字符串进行修改 线程是同步的
与数组之间的区别:
StringBuffer:长度是可变的,可以存储不同类型的数据
数组:长度不可变,只能存储一种数据类型
StringBuffer功能:
存储(create)
StringBuffer append():将指定的数据作为参数添加到已有数据结尾处(除了byte和short类型的数据没有以外其他数据类型都有都可以)
StringBuffer insert(index,数据):可以将数据插入到指定index位置
1 public static void method_add(){ 2 StringBuffer sb = new StringBuffer(); 3 //sb.append("abc").append(true).append(5378);方法调用链结果是一串字符串 4 //StringBuffer sb1 = sb.append(34563); 5 System.out.println("sb==sb1:"+(sb==sb1));//结果是true sb和sb1指向同一个对象,这叫做面盆理论,不管往StringBuffer这个容器里加什么结果还是这个容器 6 //指定位置添加元素 7 //StringBuffer sb2=sb1. insert(3,"hello"); 8 //sop(sb2.toString()); 9 }
删除(delete)
StringBuffer delete(start,end)
删除缓冲区中的数据,包含start,不包含end,如果start超过角标的话,会抛出异常字符串角标越界
StringBuffer
deleteCharAt(index) 删除指定位置的字符
1 public static void method_del(){ 2 StringBuffer sb = new StringBuffer("huangjianfeng"); 3 System.out.println(sb.toString()); 4 5 //删除某一部分 6 sb.delete(1,3); 7 System.out.println(sb.toString()); 8 9 //删除字符串中的某一个元素 10 sb.delete(2,3); 11 sb.deleteCharAt(2); 12 System.out.println(sb.toString()); 13 14 15 //清空缓冲区 16 //sb=new StringBuffer//错误,这是又定义一个缓冲区 sb指向了一个新的缓冲区 17 sb.delete(0,sb.length()); 18 System.out.println(sb.toString()); 19 20 }
获取(read)
char charAt(int
index)
int indexOf(String str)
int
lastIndexOf(String str)
int length()
String substring(int start , int end)
1 public static void Method_read(){ 2 StringBuffer sb = new StringBuffer("javascript"); 3 char ch = sb.charAt(3); 4 int index1 = sb.indexOf("sc"); 5 int index2 = sb.lastIndexOf("sc"); 6 int len = sb.length(); 7 String str = sb.substring(5,7); 8 sop("ch="+ch+",index1="+index1+",index2="+index2+",len="+len+",str="+str); 9 }
修改(update)
StringBuffer
replace(start,end,string);
void setCharAt(int index,char
ch); 只可以替换某一个字符
1 public static void Method_Update(){ 2 StringBuffer sb1 = new StringBuffer("javascript"); 3 StringBuffer sb2 = sb1.replace(4,10,"ee"); 4 System.out.println(sb2); 5 sb1.setCharAt(1,‘b‘); 6 System.out.println(sb1); 7 }
其他常用的方法:
反转 StringBuffer reverse();
设置StringBuffer容器的长度 setLength();
将缓冲区中指定数据存储到指定字符数组中 void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin);
1 public static void Method_Other() { 2 StringBuffer sb = new StringBuffer(); 3 //设置长度 4 sb.setLength(4); 5 System.out.println(sb.length()); 6 7 //将字符串反转 8 StringBuffer sb1 = new StringBuffer("huangjianfeng"); 9 sb1 = sb1.reverse(); 10 System.out.println(sb1); 11 12 // 将缓冲区中指定数据存储到指定字符数组中 13 char[] arr = new char[15]; 14 StringBuffer sb2 = new StringBuffer("huangjianfeng"); 15 sb2.getChars(0, 7, arr, 3); 16 for(char sbs : arr){ 17 System.out.print(sbs); 18 } 19 }
JDK1.5版本之后出现了StringBuilder
StringBuilder是线程不同步的,通常用于单线程提高效率 Stringbuffer是线程同步的,通常用于多线程 开发建议使用StringBuilder,提升效率
升级三个因素: 提高效率 简化书写 提高安全性
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。