【问题标题】:When should I use Java's StringWriter? [closed]什么时候应该使用 Java 的 StringWriter? [关闭]
【发布时间】:2014-12-01 03:31:32
【问题描述】:

什么是 Java StringWriter,我应该什么时候使用它?

我已经阅读了文档并查看了here,但我不明白什么时候应该使用它。

【问题讨论】:

  • 也许这对其他人有用。
  • 所有人都可以直接搜索StringWriterjavadoc。
  • “将其输出收集在字符串缓冲区中的字符流,然后可用于构造字符串”的哪一部分您不明白吗?
  • 感谢您的所有回答!它们都非常有用!特别是,我要感谢回答的人提供了在文档中无法简单找到的用法示例,例如 @RossBille 对其在串联优化中的用法的解释,以及 Jaskey 对其在打印堆栈跟踪中的用法的解释。
  • @MarkusWillson ,如果它回答了您的问题并对您有所帮助,请接受其中一个答案。下一次,你应该在 SO 上搜索一些类似的问题后,用一个更有意义的标题和一个狭窄的范围提出问题,这样没有人会否决。

标签: java string stringwriter


【解决方案1】:

这是一个专门的Writer,将字符写入StringBuffer,然后我们使用toString()之类的方法来获取字符串结果。

当使用StringWriter 时,您想要写入字符串,但API 需要WriterStream。这是一个折中的方法,你只在必要的时候使用StringWriter,因为StringBuffer/StringBuilder写字符更自然、更容易,这应该是你的首选。

这里有两个典型的好用例StringWriter

1.将堆栈跟踪转换为String,以便我们轻松记录它。

StringWriter sw = new StringWriter();//create a StringWriter
PrintWriter pw = new PrintWriter(sw);//create a PrintWriter using this string writer instance
t.printStackTrace(pw);//print the stack trace to the print writer(it wraps the string writer sw)
String s=sw.toString(); // we can now have the stack trace as a string

2.另一种情况是,我们需要从InputStream 复制到Writer 上的字符,以便稍后使用Apache commons IOUtils#copy 获取String

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);//copy the stream into the StringWriter
String result = writer.toString();

【讨论】:

  • 我的回答中已经涵盖了你的很多解释
  • @RossBille ,你给出了一个很好的解释,但有一个不好的例子,我们实际上不应该选择StringWriter。此外,我认为我们不应该将其称为类似于StringBuffer/StringBuilder,它更像是一个处理流/编写器案例的适配器,只有在我们别无选择时才应该这样做。
【解决方案2】:

用于构造字符串char-by-charstring-by-string

它类似于StringBuilder,但在底层使用StringBuffer。当您使用需要流或写入器的 API 时,这是更可取的。如果您没有此要求,使用StringBuilder 应该更有效(由于StringBuffer 的同步开销)。

当然,这只有在您意识到字符串连接时才有意义(例如。

String s = "abc"+"def"; //... (especially when spread throughout a loop)` 

是一个缓慢的操作(见here)。

小例如

StringWriter writer = new StringWriter();
writer.write('t');
writer.write("his awesome");
String result = writer.toString();
System.out.println(result); //outputs this is awesome

一个更好的例子:

String[] strings = /* some array of strings*/
StringWriter writer = new StringWriter();
for(String s : strings){
    writer.write(s);
}    
String result = writer.toString();
System.out.println(result);

【讨论】:

  • 我将使用 StringBuffer/StringBuilder 代替 StringWriter 来解决您的问题。
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 2012-12-23
  • 2021-07-13
  • 2016-05-14
  • 2022-01-02
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多