java - StringBuilder 与 StringWriter 和 PrintWriter 的字符串组装

标签 java

我最近遇到了一个从未见过的习语:StringWriterPrintWriter 的字符串组装。我的意思是,我知道如何使用它们,但我一直使用 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 是当您想要写入字符串时使用的,但您正在使用需要 WriterStream 的 API 。这不是一种选择,而是一种妥协:只有在必要时才使用 StringWriter

关于java - StringBuilder 与 StringWriter 和 PrintWriter 的字符串组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2980805/

相关文章:

java - GSSException : [. .] 不支持/启用使用 HMAC SHA1-96 的加密类型 AES256CTS 模式

java - Apache Spark - 并行处理来自 Kafka 的消息 - Java

java - 如何使用二次贝塞尔曲线近似圆的八分圆?

java - 创建自定义 getColor(byte r, byte g, byte b) 方法

java - Netbeans:构建后找不到库

java - 使用 javax.sound.midi 包设置乐器 channel

java - toString方法ArrayList简单递归

java - AWS 转录过程完成后调用另一个 lambda

java - 声明回调;仅当部署到 Heroku 时,SQL 语法才错误

java - 此类中 getter/setter 的用途