比较 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
使用分隔符提供了一系列字符串的简洁高效格式,但不适用于其他格式化任务。