Как записать многострочную строку
Короткий ответ
Текстовый блок начинается и заканчивается тремя кавычками """. Переводы строк в нём сохраняются как есть:
void main() {
String poem = """
Roses are red,
Violets are blue.
""";
IO.print(poem);
}Результат:
Roses are red,
Violets are blue.Отступы
Java убирает общий отступ всех строк. Позиция закрывающих """ тоже учитывается — так можно оставить отступ в результате:
void main() {
String json = """
{
"name": "Anna"
}
""";
IO.print(json);
}Результат:
{
"name": "Anna"
}Подстановка значений
Текстовый блок — обычная строка, поэтому к нему применим formatted():
void main() {
String name = "Oleg";
int total = 42;
String message = """
Hello, %s!
Your total is %d €.
""".formatted(name, total);
IO.print(message);
}Результат:
Hello, Oleg!
Your total is 42 €.Без перевода строки в конце
Если закрывающие кавычки стоят на той же строке, что и текст, последнего перевода строки не будет. А \ в конце строки склеивает её со следующей:
void main() {
String sql = """
SELECT name \
FROM users""";
IO.println("[" + sql + "]");
}Результат:
[SELECT name FROM users]Частая ошибка
Начать текст сразу после открывающих кавычек. После """ обязательно должен идти перевод строки:
void main() {
String text = """Hello
""";
IO.println(text);
}Результат:
Main.java:2: error: illegal text block open delimiter sequence, missing line terminatorФункции из этого ответа
- String.formatted() — Подставляет значения в саму строку как в шаблон — короткая форма String.format().
- Text block """ — Многострочный строковый литерал в тройных кавычках.
- String.lines() — Разбивает строку на строки по переводам строки и возвращает их потоком.