Java:字串緩衝區StringBuffer和StringBuilder的使用

weixin_34391854發表於2015-10-27
StringBuffer特點:
1、是字元緩衝區,一個容器(不論緩衝區內容怎麼變化,StringBuffer這個容器物件都不會改變)
2、是可變長度的
3、可以直接操作多個資料型別
4、最終會通過toString()方法變成字串
 
@儲存:StringBuffer append():將指定的資料作為引數新增到已有的資料結尾處。
      StringBuffer insert(index,資料):可以將資料插入到指定的index位置處。
 
@刪除:StringBuffer delete(Start,end):刪除緩衝區的資料,包含頭start,不包含尾end
      StringBuffer deleteCharAt(int index):刪除指定位置的字元
 
@獲取: char charAt(int index) 
       int indexOf(String str)
       int indexOf(String str, int fromIndex) 
  int lastIndexOf(String str) 
       int lastIndexOf(String str, int fromIndex)  
  int length()  
  String substring(int start)  
  String substring(int start, int end) 
  String toString() 
 
@修改:StringBuffer replace(int start, int end, String str) :將指定位置的字串用其他的字串替換掉
      void setCharAt(int index, char ch):替換一個字元 
 
@反轉: StringBuffer reverse():將容器中的字串進行反轉
 
@將緩衝區的指定資料存放到指定陣列的指定位置中: void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
 
 
JDk1.5版本之後出現了StringBuilder.
 
相同點:方法功能全部一樣
不同點:StringBuffer 是執行緒同步的,具有鎖(適用於多執行緒)
        StringBuilder 是執行緒不同步的,沒有鎖(適用於單執行緒)
 
注意:以後開發建議使用StringBuilder,因為它提高了效率
 
JAVA升級始終圍繞著三點:1、提高效率 2、簡化書寫 3、提高安全性 
 
應用具體舉例如下:
class StringBufferTest
{   
//列印資料
public static void sop(String str) { System.out.println(str); } public static void main(String[] args) { storage_method();//儲存資料 delete_method();//刪除資料 update_method();//修改資料 reverse_method();//反轉資料 getchars_method();//取得資料存放陣列中 } //儲存資料 public static void storage_method() { StringBuffer sb = new StringBuffer(); sop(sb.toString());//返回StringBuffer物件中的結果是null sb.append("abc").append(true).append(34);//方法呼叫鏈,連續新增資料 sop(sb.toString());//返回StringBuffer物件中的結果是“abctrue34” sb.insert(0,"qq");//插入資料 sop(sb.toString());//返回StringBuffer物件中的結果是"qqabctrue34" } //刪除資料 public static void delete_method() { StringBuffer sb = new StringBuffer("abcdefg");//直接對StringBuffer物件進行初始化 sop(sb.toString());//返回StringBuffer物件中的結果是"abcdefg" sb.delete(0,2);//刪除從0到2的資料,不包含2位置處的資料 sop(sb.toString());//返回StringBuffer物件中的結果是"cdefg" sb.deleteCharAt(2);//刪除指定的4位置處的字元====>>sb.delete(2,3); sop(sb.toString());//返回StringBuffer物件中的結果是"cdfg" sb.delete(0,sb.length());//清空緩衝區 sop(sb.toString());//返回StringBuffer物件中的結果是null } //修改資料 public static void update_method() { StringBuffer sb = new StringBuffer("abcdefg");//直接對StringBuffer物件進行初始化 sop(sb.toString());//返回StringBuffer物件中的結果是"abcdefg" sb.replace(1,4,"java");//用java替換掉從1到4(不包含4)的字串。 sop(sb.toString());//返回StringBuffer物件中的結果是"ajavaefg" sb.setCharAt(0,'k');//用字元‘k’替換0角標處的字元 sop(sb.toString());//返回StringBuffer物件中的結果是"kjavaefg" } //反轉資料 public static void reverse_method() { StringBuffer sb = new StringBuffer("abcdefg");//直接對StringBuffer物件進行初始化 sop(sb.toString());//返回StringBuffer物件中的結果是"abcdefg" sb.reverse(); sop(sb.toString());//返回StringBuffer物件中的結果是"gfedcba" } //獲取資料存放陣列中 public static void getchars_method() { StringBuffer sb = new StringBuffer("abcdefg");//直接對StringBuffer物件進行初始化 char[] chs = new char[5];//建立一個陣列物件 sop(sb.toString());//返回StringBuffer物件中的結果是"abcdefg" sb.getChars(1,4,chs,1);//將StringBuffer中的從1到4(不包含4)的位置中的資料存放到陣列chs中,並從角標1處開始存放 for(int i=0;i<chs.length;i++) { sop("chs["+i+"]="+chs[i]+";"); } } }

 

相關文章