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 に答える
0

空の引用符を単純な String コンストラクターに置き換えることができます。

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

Performance pointy of view StringBuilder appending is better than String concatenation, but StringBuilder doesn't provide thread safety. If you need thread safety use StringBuffer.

于 2013-11-14T11:37:10.137 に答える
0

s をStringBuilderに連結するために使用できます。charString

この答えを見てください

于 2013-11-14T11:04:23.143 に答える