【问题标题】:Plus operator - How to enforce String concatenation?加号运算符 - 如何强制字符串连接?
【发布时间】:2013-11-14 11:02:05
【问题描述】:

在用 Java 编写 Quine(即自我复制程序)时,我尝试使用制表符缩进输出行:

...
char tab = '\t';
char qm = 34;
char comma = ',';
...
System.out.println(tab + tab + tab + qm + listing[i] + qm + comma);
...

这不起作用,因为“tab + tab + ...”中的加号运算符会添加制表符值而不是生成字符串 (61 = 9 + 9 + 9 + 34):

...
61    public static void main(String[] args) {",
...

在开头放置一个空字符串就可以了:

...
System.out.println("" + tab + tab + tab + qm + listing[i] + qm + comma);
...

但是,我不能在 Quine 设置中使用纯引号,因为我需要将它们转义以输出程序文本本身。

我想知道是否可以在不显式使用引号或其他 Java 类的情况下强制将加号运算符解释为字符串连接?

【问题讨论】:

    标签: java quine


    【解决方案1】:

    你绝对需要使用+-符号吗?这也可以解决问题,并且专为性能而设计:

    String outputString = new StringBuilder()
        .append(tab).append(tab).append(tab).append(qm)
        .append(listing[i]).append(qm).append(comma)
        .toString();
    System.out.println(outputString);
    

    【讨论】:

      【解决方案2】:

      使用System.out.printf 而不是System.out.println

       char tab = '\t';
       char qm = 34;
       char comma = ',';
       System.out.printf("%c%c%c", tab, tab,comma);
      

      【讨论】:

        【解决方案3】:

        您可以使用StringBuilderchars 连接到String

        看看this的回答

        【讨论】:

          【解决方案4】:

          你可以用简单的字符串构造函数替换空引号:

          ...
          System.out.println(new String() + tab + tab + tab + qm + listing[i] + qm + comma);
          ...
          

          【讨论】:

            【解决方案5】:

            从性能角度来看StringBuilder 附加优于String 连接,但StringBuilder 不提供线程安全。 如果您需要线程安全,请使用StringBuffer

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-02-27
              • 2017-02-04
              • 2016-07-19
              • 2011-06-11
              • 2015-08-28
              • 2010-09-08
              • 1970-01-01
              相关资源
              最近更新 更多