比較 StringBuffer StringBuilder Formatter 和 StringJoiner

StringBufferStringBuilderFormatterStringJoiner 類是 Java SE 實用程式類,主要用於從其他資訊組裝字串:

  • StringBuffer 類自 Java 1.0 以來就已存在,並提供了各種方法來構建和修改包含字元序列的緩衝區

  • 在 Java 5 中新增了 StringBuilder 類來解決原始 StringBuffer 類的效能問題。這兩個分支的 API 基本相同。StringBufferStringBuilder 之間的主要區別在於前者是執行緒安全的並且是同步的而後者不是。

此示例顯示瞭如何使用 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

StringBufferStringBuilder 類適用於組裝和修改字串; 即,它們提供了替換和刪除字元以及新增各種字元的方法。提醒兩個類特定於組裝字串的任務。

  • 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 使用分隔符提供了一系列字串的簡潔高效格式,但不適用於其他格式化任務。