Оператор Плюс - Как применить конкатенацию строк?

При написании Quine (т.е. самореплицирующейся программы) на Java я пытался сделать отступ для строк вывода, используя символы табуляции:

...
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?

5 ответов

Вам обязательно нужно использовать +-сигналы? Это тоже поможет, и рассчитано на производительность:

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

Использование System.out.printf вместо System.out.println

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

Вы можете заменить пустые кавычки на простой конструктор String:

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

Ты можешь использовать StringBuilder соединять charс String,

Посмотрите на этот ответ

Пик производительности представления Добавление StringBuilder лучше, чем конкатенация String, но StringBuilder не обеспечивает безопасность потоков. Если вам нужна безопасность потоков, используйте StringBuffer.

Другие вопросы по тегам