在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类?
答案 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)
您可以使用StringBuilder
将char
连接到String
。
查看this回答
答案 3 :(得分:0)
您可以使用简单的String构造函数替换空引号:
...
System.out.println(new String() + tab + tab + tab + qm + listing[i] + qm + comma);
...
答案 4 :(得分:0)
视图StringBuilder追加的性能指针优于String连接,但StringBuilder不提供线程安全性。 如果您需要使用线程安全StringBuffer。