StringBuffer类、StringBuilder类详解

StringBuffer是一个字符串缓冲区,是一个容器,而且长度可变,可以直接操作多个数据类型,

                      最终会通过toString()方法变成字符串。

容器的功能有:

1、存储

public StringBuffer   append():将指定数据添加到已有数据的结尾处。

public StringBuffer insert(int offset,char c):  将字符c插入到offset位置。

 1)

 
  1. package j2se.StringBuffer.one;  
  2.   
  3. public class TestStringBufferDemo1 {  
  4.   
  5.     public static void main(String[] args) {  
  6.         StringBuffer sb =new StringBuffer();  
  7.         StringBuffer sb1=sb.append(88);  
  8.         sop(sb.toString());  
  9.         sop(sb1.toString());  
  10.         sop("sb==sb1:  "+ (sb==sb1));  
  11.         sop("sb.equals(sb1): "+(sb.equals(sb1)));  
  12.     }  
  13.     public static void sop(String str){  
  14.         System.out.println(str);  
  15.     }  
  16. }  

结果为:

88
88
sb==sb1:  true
sb.equals(sb1): true


2)

 
  1. package j2se.StringBuffer.one;  
  2.   
  3. public class TestStringBufferDemo1 {  
  4.   
  5.     public static void main(String[] args) {  
  6.         StringBuffer sb =new StringBuffer();  
  7.         StringBuffer sb1=sb.append(88).append(true).append("big");  
  8.         sop(sb.toString());  
  9.         sop(sb1.toString());  
  10.     }  
  11.     public static void sop(String str){  
  12.         System.out.println(str);  
  13.     }  
  14. }  

结果为:

88truebig
88truebig

3)指定位置插入

 
  1. package j2se.StringBuffer.one;  
  2.   
  3. public class TestStringBufferDemo1 {  
  4.   
  5.     public static void main(String[] args) {  
  6.         StringBuffer sb =new StringBuffer();  
  7.         sb.append(88).append(true).append("big");  
  8.         sb.insert(1,"qqhaoma");  
  9.         sop(sb.toString());  
  10.     }  
  11.     public static void sop(String str){  
  12.         System.out.println(str);  
  13.     }  
  14. }  

输出结果为:

8qqhaoma8truebig

2、删除

public StringBuffer delete(int start,int end)
          删除  start位置开始,end位置结束的子字符串,
          注意删除的内容包含头(start),不包含尾(end)。
public StringBuffer deleteCharAt(int index)
           删除指定位置的字符。
 
1)
 
  1. package j2se.StringBuffer.one;  
  2.   
  3. public class TestStringBufferDemo2 {  
  4.   
  5.     public static void main(String[] args) {  
  6.         StringBuffer sb= new StringBuffer("abcde");  
  7.         sb.delete(1,3);  
  8.         System.out.println(sb.toString());  
  9.     }  
  10.   
  11. }  
结果为:
ade
 

2)清空缓存区

 
  1. package j2se.StringBuffer.one;  
  2.   
  3. public class TestStringBufferDemo2 {  
  4.   
  5.     public static void main(String[] args) {  
  6.         StringBuffer sb= new StringBuffer("abcde");  
  7.         //清空缓冲区。  
  8.         sb.delete(0,sb.length());  
  9.         System.out.println(sb.toString());  
  10.     }  
  11.   
  12. }  

3、获取

public char charAt(int index)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
public int length()
public String substring(int start,int end)

4、修改

public StringBuffer replace(int start,int end,String str)
   将start开始,end结尾的子字符串替换成str,包含开头,不包含结尾。
 
public void setCharAt(int index,char ch) 
         设置index位置的字符为ch
 
  1)
 
  1. package j2se.StringBuffer.one;  
  2.   
  3. public class TestStringBufferDemo3 {  
  4.   
  5.     public static void main(String[] args) {  
  6.         StringBuffer sb= new StringBuffer("abcde");  
  7.         sb.replace(1, 4, "java");  
  8.         System.out.println(sb.toString());  
  9.   
  10.     }  
  11.   
  12. }  

结果为:

ajavae

  2)

 
  1. package j2se.StringBuffer.one;  
  2.   
  3. public class TestStringBufferDemo3 {  
  4.   
  5.  public static void main(String[] args) {  
  6.   StringBuffer sb= new StringBuffer("abcde");  
  7.   sb.replace(1, 4, "java");  
  8.   sb.setCharAt(0,'b');  
  9.   System.out.println(sb.toString());  
  10.  }  
  11. }  

结果为:

bjavae

5、反转

public StringBuffer reverse()

      将字符串反转

6、

public void getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin)

      将缓冲区中指定数据存储到指定字符数组中。包含头,不包含尾。

 
  1. package j2se.StringBuffer.one;  
  2. public class TestStringBufferDemo4 {  
  3.     public static void main(String[] args) {  
  4.         StringBuffer st=new StringBuffer("abcdefg");  
  5.         char[] ch =new char[8];  
  6.         st.getChars(0,6,ch, 1);  
  7.         for(int i=0;i<8;i++){  
  8.             System.out.println("ch["+i+"]= " +ch[i]);  
  9.         }  
  10.     }  
  11. }  

结果为:

数据库 CURD    create  update read delete)

 JDK1.5以后出现StringBuilder。

StringBuilder类完全兼容StringBuffer类的API,也就是说它是StringBuffer类的翻版。与其不同点是:

StringBuilder类没有线程锁即线程不同步,StringBuffer类是线程同步的。

多线程用StringBuffer类或者用StringBuilder类再自己加锁,单线程用StringBuilder类。

以后开发建议用StringBuilder类。

JDK升级三因素:

1、提高效率

2、简化书写

3、提高安全性

原文地址:https://www.cnblogs.com/SimplifyIT/p/6516294.html