比較 StringBuffer StringBuilder Formatter 和 StringJoiner
StringBuffer
,StringBuilder
,Formatter
和 StringJoiner
類是 Java SE 實用程式類,主要用於從其他資訊組裝字串:
-
StringBuffer
類自 Java 1.0 以來就已存在,並提供了各種方法來構建和修改包含字元序列的緩衝區。 -
在 Java 5 中新增了
StringBuilder
類來解決原始StringBuffer
類的效能問題。這兩個分支的 API 基本相同。StringBuffer
和StringBuilder
之間的主要區別在於前者是執行緒安全的並且是同步的而後者不是。
此示例顯示瞭如何使用 StringBuilder
:
int one = 1;
String color = "red";
StringBuilder sb = new StringBuilder();
sb.append("One=").append(one).append(", Color=").append(color).append('\n');
System.out.print(sb);
// Prints "One=1, Colour=red" followed by an ASCII newline.
(StringBuffer
類的使用方法相同:只需將 StringBuilder
改為 StringBuffer
)
StringBuffer
和 StringBuilder
類適用於組裝和修改字串; 即,它們提供了替換和刪除字元以及新增各種字元的方法。提醒兩個類特定於組裝字串的任務。
-
Formatter
類在 Java 5 中新增,並且在 C 標準庫中的sprintf
函式上進行了鬆散的建模。它採用帶有嵌入格式說明符和其他引數序列的格式字串,並通過將引數轉換為文字並用它們代替格式說明符來生成字串。格式說明符的詳細資訊說明了如何將引數轉換為文字。 ** -
在 Java 8 中新增了
StringJoiner
類。它是一種特殊用途的格式化程式,它簡潔地格式化了一系列字串,並在它們之間使用了分隔符。它採用流暢的 API 設計,可與 Java 8 流一起使用。
以下是 Formatter
用法的一些典型示例:
// This does the same thing as the StringBuilder example above
int one = 1;
String color = "red";
Formatter f = new Formatter();
System.out.print(f.format("One=%d, colour=%s%n", one, color));
// Prints "One=1, Colour=red" followed by the platform's line separator
// The same thing using the `String.format` convenience method
System.out.print(String.format("One=%d, color=%s%n", one, color));
StringJoiner
類不適用於上述任務,因此這裡是一個格式化字串陣列的示例。
StringJoiner sj = new StringJoiner(", ", "[", "]");
for (String s : new String[]{"A", "B", "C"}) {
sj.add(s);
}
System.out.println(sj);
// Prints "[A, B, C]"
可以總結 4 個類的用例:
StringBuilder
適合任何字串彙編或字串修改任務。StringBuffer
使用(僅)當你需要執行緒安全版本的StringBuilder
時。Formatter
提供了更豐富的字串格式化功能,但效率不如StringBuilder
。這是因為每次呼叫Formatter.format(...)
都需要:- 解析
format
字串, - 建立和填充 varargs 陣列,和
- 自動裝箱任何原始型別的引數。
- 解析
StringJoiner
使用分隔符提供了一系列字串的簡潔高效格式,但不適用於其他格式化任務。