Вышел новый черновик 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.