【问题标题】:Print Strings with java PrintWriter: Concatatenate or loop?使用 java PrintWriter 打印字符串:连接 for 循环?
【发布时间】:2016-03-26 19:16:20
【问题描述】:

假设我想在 java 中使用 PrintWriter 打印许多字符串,例如 "Hello" + var1 + "|" + var2

我的第一个选择是使用类似的东西:

Output.print("Hello" + var1 + "|" + var2);

其中OutputPrintWriter 实例。在这种情况下,Java 必须连接所有项目(有些可能需要转换为String),然后传递一个String 参数来写入。

也许这样会更有效:

void PrintMsg(PrintWriter Output, String... Msg) {
    for(String M : Msg) Output.write(M);  
}

在这种情况下,我会打电话给PrintMsg(Output, "Hello", var1, "|", var2);。没有串联开销,但仅适用于 String 参数。如果var1var2 不是String,我将不得不致电:

PrintMsg(Output, "Hello", var1.toString(), "|", var2.toString());

或像这样重写PrintMsg

void PrintMsg(PrintWriter Output, Object... Msg) {
    for(Object M : Msg) Output.write(M.toString());  
}

我想知道您对如何做到这一点的最佳方式的看法。 提前致谢。

【问题讨论】:

  • 如果你真的有很多串联要执行,我建议你使用StringBuilder

标签: java string printing output concatenation


【解决方案1】:
  1. 循环几乎可以肯定稍微更好,因为进行字符串连接是额外的工作。
  2. 这是额外的工作,但如果我们只是谈论您问题中的那种事情,那就很少了 - 只是几个字符串。在实际观察之前,您过于担心一个非常小的性能问题。如果您在至少 100 次迭代的循环中开始连接,您可能会担心。过早的优化是万恶之源。关于这一点,回答这个问题的理想方法是编写一个程序来测量所花费的时间。这很容易做到。
  3. 如果M == nullM.toString() 将抛出异常。永远记得问问自己当某事是null 时会发生什么。您可能想要抛出异常,但我认为在这种情况下有点混乱。假设您要将null 转换为字符串"null",请使用String.valueOf(M)
  4. Java 方法和变量的命名约定是camelCase,以小写字母开头,即printMsgoutputmmsg
  5. 这类问题可以考虑 https://codereview.stackexchange.com/,因为它是专门为此量身定制的。

【讨论】:

    【解决方案2】:

    我认为它不会更有效,因为有一个循环。在执行方面,它实际上可能更糟,因为它添加了直接打印没有的循环控制指令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-17
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 2015-12-16
      • 1970-01-01
      • 2016-09-11
      相关资源
      最近更新 更多