1

在用 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 类的情况下强制将加号运算符解释为字符串连接?

4

5 回答 5

3

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

String outputString = new StringBuilder()
    .append(tab).append(tab).append(tab).append(qm)
    .append(listing[i]).append(qm).append(comma)
    .toString();
System.out.println(outputString);
于 2013-11-14T11:05:28.853 回答
1

使用System.out.printf代替System.out.println

 char tab = '\t';
 char qm = 34;
 char comma = ',';
 System.out.printf("%c%c%c", tab, tab,comma);
于 2013-11-14T11:10:06.013 回答
0

性能观点StringBuilder追加优于String连接,但StringBuilder不提供线程安全。如果您需要线程安全,请使用StringBuffer

于 2013-11-14T11:37:10.137 回答
0

您可以用简单的 String 构造函数替换空引号:

...
System.out.println(new String() + tab + tab + tab + qm + listing[i] + qm + comma);
...
于 2013-11-14T11:33:56.530 回答
0

您可以使用StringBuilderchars 连接到String.

看看这个答案

于 2013-11-14T11:04:23.143 回答