Java: Многострочные строки
Иногда текст в программе должен занимать несколько строк. Так бывает при генерации письма, создании шаблона, форматировании сообщения об ошибке или работе с длинными текстами.
Один способ мы уже видели. Это символ перевода строки \n внутри обычной строки в двойных кавычках:
System.out.println("Пример текста,\nсостоящего из\nнескольких строк");На печати получится вот так:
Пример текста,
состоящего из
нескольких строкСпособ рабочий, но неудобный. Каждый \n приходится вставлять вручную, и чем длиннее текст, тем хуже читается код.
Текстовые блоки
В Java есть запись, при которой текст в коде выглядит так же, как при выводе. Это текстовый блок (text block). Он начинается и заканчивается тремя двойными кавычками """.
Открывающие """ ставят в конце строки, а сам текст пишут со следующей строки:
System.out.println("""
Пример текста,
состоящего из
нескольких строк""");Вывод будет таким же, как у варианта с \n:
Пример текста,
состоящего из
нескольких строкПереносы строк внутри блока Java добавляет сама, поэтому \n писать не нужно.
Отступы внутри блока
Текст блока удобно сдвигать вправо, чтобы он не сливался с кодом. Java смотрит на общий отступ всех строк блока и отсекает его от каждой строки. В примере выше у каждой строки слева четыре пробела, и все четыре уходят из результата. В выводе строки начинаются с первого символа.
Положение закрывающих """ тоже влияет на отступ. Если сдвинуть их левее текста, часть пробелов слева останется в результате. Поэтому закрывающие кавычки обычно держат на уровне текста или сразу после последней строки.
Кавычки без экранирования
Внутри текстового блока двойные кавычки можно писать прямо, без обратного слеша:
System.out.println("""
Здесь "двойные" кавычки видны как есть""");Вывод:
Здесь "двойные" кавычки видны как естьВ обычной строке для этого пришлось бы экранировать каждую кавычку через \".
Заключение
Текстовый блок записывают между тройными двойными кавычками """. Открывающие """ ставят в конце строки, а текст пишут ниже. Переносы строк Java добавляет сама, общий отступ слева отсекается. Для машины текстовый блок и строка с \n означают одно и то же, но для человека блок нагляднее.
Задание
Используя текстовый блок """...""", выведите на экран текст из двух строк:
Summer
has comeПодберите отступ внутри блока так, чтобы слова начинались с первого символа без лишних пробелов слева.
Полезное
Java: Многострочные строки
Иногда текст в программе должен занимать несколько строк. Так бывает при генерации письма, создании шаблона, форматировании сообщения об ошибке или работе с длинными текстами.
Один способ мы уже видели. Это символ перевода строки \n внутри обычной строки в двойных кавычках:
System.out.println("Пример текста,\nсостоящего из\nнескольких строк");На печати получится вот так:
Пример текста,
состоящего из
нескольких строкСпособ рабочий, но неудобный. Каждый \n приходится вставлять вручную, и чем длиннее текст, тем хуже читается код.
Текстовые блоки
В Java есть запись, при которой текст в коде выглядит так же, как при выводе. Это текстовый блок (text block). Он начинается и заканчивается тремя двойными кавычками """.
Открывающие """ ставят в конце строки, а сам текст пишут со следующей строки:
System.out.println("""
Пример текста,
состоящего из
нескольких строк""");Вывод будет таким же, как у варианта с \n:
Пример текста,
состоящего из
нескольких строкПереносы строк внутри блока Java добавляет сама, поэтому \n писать не нужно.
Отступы внутри блока
Текст блока удобно сдвигать вправо, чтобы он не сливался с кодом. Java смотрит на общий отступ всех строк блока и отсекает его от каждой строки. В примере выше у каждой строки слева четыре пробела, и все четыре уходят из результата. В выводе строки начинаются с первого символа.
Положение закрывающих """ тоже влияет на отступ. Если сдвинуть их левее текста, часть пробелов слева останется в результате. Поэтому закрывающие кавычки обычно держат на уровне текста или сразу после последней строки.
Кавычки без экранирования
Внутри текстового блока двойные кавычки можно писать прямо, без обратного слеша:
System.out.println("""
Здесь "двойные" кавычки видны как есть""");Вывод:
Здесь "двойные" кавычки видны как естьВ обычной строке для этого пришлось бы экранировать каждую кавычку через \".
Заключение
Текстовый блок записывают между тройными двойными кавычками """. Открывающие """ ставят в конце строки, а текст пишут ниже. Переносы строк Java добавляет сама, общий отступ слева отсекается. Для машины текстовый блок и строка с \n означают одно и то же, но для человека блок нагляднее.
Задание
Используя текстовый блок """...""", выведите на экран текст из двух строк:
Summer
has comeПодберите отступ внутри блока так, чтобы слова начинались с первого символа без лишних пробелов слева.
Полезное
Ваше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
class AppTest {
public static void main(String[] args) {
final var expected = "Summer\nhas come";
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
App.main(null);
final var actual = out.toString().trim();
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.out.println(actual);
assertThat(actual).isEqualTo(expected);
}
}Решение учителя откроется через:
20:00
