Plus运算符 - 如何强制执行字符串连接?

时间:2013-11-14 11:02:06

标签: java quine

在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设置中使用简单的引号,因为我需要将它们转义为输出程序文本本身。

我想知道是否可以将plus运算符的解释强制执行为字符串连接而不是明确地使用引号或其他Java类?

5 个答案:

答案 0 :(得分:3)

你绝对需要使用+ -signs吗?这也是诀窍,并且就性能而言是专为它设计的:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以使用StringBuilderchar连接到String

查看this回答

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

视图StringBuilder追加的性能指针优于String连接,但StringBuilder不提供线程安全性。 如果您需要使用线程安全StringBuffer