- Java與Android移動應用開發:技術、方法與實踐
- 曹化宇
- 1066字
- 2019-12-06 15:39:23
6.2 StringBuffer類
String類處理的是不可變字符串,對其內容操作時,就會生成新的String對象。如果字符串進行大量的操作,其效率是非常低的。為了解決這一問題,可以使用StringBuffer或StringBuilder類來操作字符串,本節首先討論StringBuffer類的使用。
6.2.1 基本操作
當創建StringBuffer對象時,可以使用幾種構造函數,如指定初始內容、指定初始大小等。
下面的代碼創建一個StringBuffer對象,并顯示其字符數量。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); System.out.println(sb.length()); // 7 }
如果創建StringBuffer對象時并不確定其內容,可以指定其初始大小。當內容不超過這個大小時,就不需要重新分配內容,所以合理地設置初始大小對于StringBuffer對象的處理效率是有幫助的,如下面的代碼所示。
StringBuffer sb = new StringBuffer(200);
6.2.2 添加內容
StringBuffer類中定義了一個系列append()方法的重載版本,用于將不同類型的數據追加到StringBuffer對象末尾,如下面的代碼所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abc"); sb.append("defg"); sb.append(123); sb.append(true); System.out.println(sb); }
代碼執行結果如圖6-6所示。
如果需要將內容插入指定的位置,可以使用insert()方法,如下面的代碼所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.insert(3,"***"); System.out.println(sb); }
代碼執行結果如圖6-7所示。

圖6-6 向StringBuffer對象末尾追加內容

圖6-7 在StringBuffer對象中插入內容
實際上,insert()方法也包括一系列的重載版本,可以將不同類型的數據插入指定的位置。其參數也很簡單,第一個參數指定插入位置的索引值,第二個參數指定需要插入的內容。
6.2.3 刪除內容
當刪除指定位置的字符時,使用deleteCharAt()方法,其參數指定待刪除字符的索引值。
此外,使用delete()方法,還可以刪除指定范圍的內容,如下面的代碼所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.delete(3,6); System.out.println(sb); // abcg }
delete()方法中,第一個參數指定開始刪除的索引位置,第二個參數的設置同樣可以參考如下規則,當執行delete(i, n)操作時,會刪除從i開始的n-i個字符。
6.2.4 查詢
定義一個StringBuffer對象后,可以通過以下一些方法獲取其內容。
□ charAt()方法,獲取指定索引位置的字符。
□ substring()方法,獲取指定范圍的字符串。
□ indexOf()方法,找到參數指定的內容,并返回第一次出現的索引位置,沒有找到則返回-1。
□ lastIndexOf()方法,找到參數指定的內容,并返回最后一次出現的索引位置,沒有找到則返回-1。
這些個方法與String類的同名方法有相同的參數,可以參考使用。
6.2.5 替換
當替換StringBuffder對象的內容時,可以使用replace()方法,它包括三個參數。
□ 第一個參數,指定開始替換的索引值。
□ 第二個參數,指定替換結束位置的后一個索引位置。
□ 第三個參數,指定替換內容。
下面的代碼演示了replace()方法的使用。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.replace(3,6,"***"); System.out.println(sb); }
代碼執行結果如圖6-8所示。
在使用replace()方法時,可以參考以下規則,即s1.replace(i, n, s2)語句會將s1字符串中從i開始的n-i個字符替換為s2的內容。

圖6-8 替換StringBuffer對象的內容
6.2.6 反向排列
使用reserve()方法,可以將StringBuffer對象中的內容反向排列,如下面的代碼所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.reverse(); System.out.println(sb); }
代碼執行結果如圖6-9所示。

圖6-9 反向排列StringBuffer對象的內容