В Java появятся две новые экранирующие последовательности для продолжения строки и пробела

Вышел новый черновик JEP, в котором предлагается ввести в язык Java две новые экранирующие последовательности: \<line-terminator> и \s.

Первая последовательность позволит писать длинные однострочные литералы без использования конкатенации. Например, вместо

String str = "A line that may need to " +
        "continue on the next line.";

можно будет писать

String str = "A line that may need to \
        continue on the next line.";

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

String str = """
        A line that may need to
        continue on the next line.""";

Такая строка транслируется в "A line that may need to\ncontinue on the next line.", поэтому в этом случае всё равно придётся использовать символ \ на конце, чтобы подавить неявный перенос строки:

String str = """
        A line that may need to \
        continue on the next line.""";

Вторая последовательность (\s) является ничем иным как просто символом пробела (U+0020), но записанным в экранирующей форме. В текущих версиях Java экранировать пробел можно писать с помощью октальной последовательности \040 или кода \u0020. Однако \s будет короче и проще для читателя. Нужен же такой явный пробел, чтобы избежать удаления компилятором лидирующих пробельных символов на концах строк в блоках текста:

String colors = """
        red     \s
        green   \s
        blue    \s
        """;

В данном случае \s является барьером, сигнализирующим компилятору, что пробелы после red, green и blue «съедать» не надо. В противном случае получилась бы строка "red\ngreen\nblue\n".

Новые последовательности предполагается реализовать в статусе Preview.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2020