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