当前位置: 首页 > 面试题库 >

StringBuilder与StringWriter和PrintWriter进行的字符串汇编

钮博裕
2023-03-14
问题内容

我最近遇到了一个我以前从未见过的习惯用法:StringWriter和PrintWriter进行的字符串汇编。我的意思是,我知道如何使用它们,但是我一直使用StringBuilder。是否有具体的理由偏爱一个?对我来说,StringBuilder方法似乎更自然,但这只是样式吗?

我在这里查看了几个问题(包括最接近的一个问题:StringWriter或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的)比其他。我第一次错过的是添加换行符。当您添加换行符时(如上,作为一个单独的附加项),它会稍微快一些-
不会很大,但是加上意图的明确性,肯定会更好。有关改善的时间安排,请参见下面的答复。


问题答案:

从风格上讲,这种StringBuilder方法更清洁。它减少了代码行,并使用了专门为构建字符串而设计的类。

另一个考虑因素是效率更高。回答这个问题的最好方法是对这两种选择进行基准测试。但是有一些明确的指针指出StringBuilder 应该
更快。首先,StringWriter使用引擎盖下的 StringBuilder StringBuffer来保存写入“流”的字符。



 类似资料:
  • 问题内容: 使用此代码: 当我使用StringBuilder运行代码时,出现错误消息 尝试了StringBuffer,它可以工作。StringBuffer对象的内容被编译为“ Java和Eclipse ..”。 } 问题答案: 确实 有一个接受a 作为参数 的构造函数,并且 确实 有一个方法(由于实现了它必须实现)。 结论:这是您的IDE中的一个不幸,它没有导入正确的。您使用的另一个库具有不幸的“

  • 字符串池是否驻留在堆上?如果是,字符串文字是否符合垃圾回收机制? 当使用时,我们知道它会在堆上创建一个对象,并将String文字放在String池中。所以我的第二个问题是:

  • 以下是Java中的代码: 输出:输入字符串:夫人 J=女士 错误的 为什么此代码的输出为false?

  • 我有两位版画作家: 我想检查他们是否都打印到同一个文件,但与 或者 没用。此外,我希望能够检查打印作者是否像这两位一样打印到同一个位置,而不是带有文件路径的字符串: 有办法吗?

  • 本文向大家介绍辨析Java中的String与StringBuffer及StringBuilder字符串类,包括了辨析Java中的String与StringBuffer及StringBuilder字符串类的使用技巧和注意事项,需要的朋友参考一下 1 String String:字符串常量,字符串长度不可变。 2 StringBuffer StringBuffer:字符串变量(Synchronized

  • 我试图编写一个程序,其中我必须做与模板(本质上是一个字符串)之间的字符串列表的比较。我不知道什么是使用的术语,但它将是更多的日志刮削程序,如果这是有帮助的。 null 这个想法是将输入语句(1-4)与模板字符串(a-b)匹配,如果它们匹配,那么我需要对它们进行操作。Like 1和4匹配句子b,但2不匹配。 提前感谢您的帮助/指示。