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()) 則會透過刪除完整範圍清空所有內容。
這些操作對物件識別的影響各不相同。重設或刪除會改變所有參照該物件的變數所看到的內容;重新指派只會改變被指派的變數。請依照哪些參考應該看到變更來選擇做法,之後再附加內容或組成下一個值。