Статьи

Java 13: текстовые блоки

Java 13 поставила долгожданные многострочные строки или текстовые блоки . Вам больше не нужно объединять строки, которые занимают несколько строк или экранировать специальные символы, что действительно улучшает читабельность вашего кода. Текстовые блоки являются функцией языка предварительного просмотра , что означает, что они должны быть явно включены в компиляторе Java и во время выполнения с использованием флага --enable-preview .

Вот пример текстового блока:

1
2
3
4
5
6
String textBlock = """
    <html>
      <body>
        <p style="color:red">This is a text block</p>
      </body>
    </html>""";

Как показано выше, текстовый блок заключен в три двойные кавычки ( """ ). За пробелом """ не должно следовать никаких непробельных символов, т.е. фактический текст должен начинаться со строки, следующей за открывающим разделителем. Вам не нужно экранировать какие-либо специальные символы в текстовом блоке, и это здорово!

В предыдущих версиях Java вам пришлось бы писать так:

1
2
3
4
5
final String old = "<html>\n" +
    "\t<body>\n" +
    "\t\t<p style=\"color:red\">This is a text block</p>\n" +
    "\t</body>\n" +
    "</html>";

Фактически, в этом примере textBlock == old поскольку оба имеют одинаковое содержимое и ссылаются на один и тот же объект в пуле String .

Теперь давайте посмотрим, как обрабатывается начальный пробел, рассмотрев следующие два текстовых блока:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
String textBlock1 = """
    <html>
      <body>
        <p style="color:red">This is a text block</p>
      </body>
    </html>""";
  
String textBlock2 = """
        <html>
          <body>
            <p style="color:red">This is a text block</p>
          </body>
        </html>
 """;

Если вы распечатаете эти два текстовых блока, первый будет напечатан как:

1
2
3
4
5
<html>
  <body>
    <p style="color:red">This is a text block</p>
  </body>
</html>

а второй как:

1
2
3
4
5
<html>
          <body>
            <p style="color:red">This is a text block</p>
          </body>
        </html>

Крайний левый символ без пробелов в любой из строк в текстовом блоке или крайний левый закрывающий разделитель определяет «начальную точку» всего блока, и пробел сохраняется в каждой строке от этой начальной точки.

Еще один момент, на который следует обратить внимание, это то, что конечные пробелы в конце каждой строки удаляются в текстовых блоках, но вы можете использовать восьмеричную escape-последовательность \040 чтобы сохранить ее, как показано ниже:

1
2
3
String octal = """
    line 1    \040
 line 2""";

Опубликовано на Java Code Geeks с разрешения Фахда Шарифа, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Java 13: текстовые блоки

Мнения, высказанные участниками Java Code Geeks, являются их собственными.