HOWTO · Java

在 Java 中清除 StringBuilder

本文展示瞭如何在 Java 中清除或清空 StringBuilder。

本頁內容

若要在保留同一個物件的情況下清空 StringBuilder,請呼叫 setLength(0)。若要讓變數改為參照新的 builder,請將新的 StringBuilder 指派給它;這不會改變其他參考所指向的舊物件。若要移除特定範圍,請使用 delete(start, end);若要清空所有內容,則使用完整範圍。

使用 setLength(0) 清空 StringBuilder

setLength(0) 會將 builder 的邏輯長度設為 0。變數仍參照同一個 StringBuilder,因此其他參照該物件的變數也會看到重設後的狀態。當你想重複使用 builder 來存放另一個值時,這種做法很實用。

請執行以下範例:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

public class Main {
  public static void main(String[] args) {
    StringBuilder builder = new StringBuilder("Hello");
    builder.setLength(0);
    builder.append("Java");
    System.out.println(builder);
  }
}
Java

重設後,附加的文字會成為 builder 的內容。容量與長度是不同的屬性;這個操作會重設邏輯內容,但不保證帶來特定的記憶體或效能效益。

將新的 StringBuilder 實例指派給變數

指派 new StringBuilder() 會改變變數所參照的物件。這不會清空或修改舊物件,因此其他別名仍參照著保有原內容的物件。若你希望變數改用獨立的新 builder,同時讓其他參考保留舊值,就適合採用這種做法。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

public class Main {
  public static void main(String[] args) {
    StringBuilder current = new StringBuilder("draft");
    StringBuilder alias = current;
    current = new StringBuilder();
    current.append("final");
    System.out.println(current);
    System.out.println(alias);
  }
}
final
draft

在此,current 參照新的 builder,而 alias 仍參照包含 draft 的 builder。若要讓所有參考都看到相同的重設結果,請改用 setLength(0) 修改原物件。

使用 delete() 移除全部或部分內容

delete(start, end) 會移除從 start 索引開始、到 end 索引之前的字元;起始索引包含在範圍內,結束索引則不包含。例如,從 "abcdef" 刪除索引 1 到 3 的字元,會移除 "bcd",留下 "aef"。若只想移除其中一段內容,delete() 就很適合。

若要使用 delete() 清空目前的全部內容,請使用從零到 builder 目前長度的範圍:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

public class Main {
  public static void main(String[] args) {
    StringBuilder builder = new StringBuilder("abcdef");
    builder.delete(1, 4);
    System.out.println(builder);
    builder.delete(0, builder.length());
    System.out.println(builder.length());
  }
}
aef
0

第一次呼叫只會移除選取的範圍。第二次呼叫會在刪除前計算結束索引,並移除當時存在的所有內容。若內容長度可能變動,使用目前長度就不必將結束位置寫死。

如何選擇清空或替換 StringBuilder

當你要重設現有物件時,請使用 setLength(0),尤其是其他程式碼也持有該物件的參考時。若只有目前的變數應改為參照新的物件,而別名應保留舊內容,請建立新的 StringBuilder。若只要移除指定部分,請使用 delete(start, end);delete(0, builder.length()) 則會透過刪除完整範圍清空所有內容。

這些操作對物件識別的影響各不相同。重設或刪除會改變所有參照該物件的變數所看到的內容;重新指派只會改變被指派的變數。請依照哪些參考應該看到變更來選擇做法,之後再附加內容或組成下一個值。