我最近遇到了一个从未见过的习语:StringWriter
和 PrintWriter
的字符串组装。我的意思是,我知道如何使用它们,但我一直使用 StringBuilder
。是否有一个具体的理由偏爱一个而不是另一个? StringBuilder
方法对我来说似乎更自然,但它只是样式吗?
我在这里查看了几个问题(包括最接近的一个:StringWriter or StringBuilder),但没有一个问题的答案真正解决了是否有理由更喜欢一个而不是另一个来进行简单的字符串组装的问题。
这是我多次看到并使用过的成语:StringBuilder 的字符串组装:
public static String newline = System.getProperty("line.separator");
public String viaStringBuilder () {
StringBuilder builder = new StringBuilder();
builder.append("first thing").append(newline); // NOTE: avoid doing builder.append("first thing" + newline);
builder.append("second thing").append(newline);
// ... several things
builder.append("last thing").append(newline);
return builder.toString();
}
这是新的成语:StringWriter 和 PrintWriter 的字符串组装:
public String viaWriters() {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
printWriter.println("first thing");
printWriter.println("second thing");
// ... several things
printWriter.println("last thing");
printWriter.flush();
printWriter.close();
return stringWriter.toString();
}
编辑似乎没有具体理由更喜欢其中一个,所以我接受了最符合我理解的答案,并+1其他答案。此外,我发布了自己的答案,给出了我运行的基准测试的结果,以回应其中一个答案。谢谢大家。
再次编辑事实证明,有一个具体的理由来选择一个(特别是 StringBuilder)而不是另一个。我第一次错过的是添加换行符。当您添加换行符(如上,作为单独的附加)时,它会稍微快一些 - 不是很大,但加上意图的清晰性,它肯定会更好。请参阅下面的答案以了解改进的时间安排。
最佳答案
StringWriter
是当您想要写入字符串时使用的,但您正在使用需要 Writer
或 Stream 的 API
。这不是一种选择,而是一种妥协:只有在必要时才使用 StringWriter
。
关于java - StringBuilder 与 StringWriter 和 PrintWriter 的字符串组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2980805/