недопустимая последовательность открытого разделителя текстового блока, отсутствующий терминатор строки

Скоро Java 13, поэтому я начал изучать его новые функции, одна из которых - текстовые блоки.

Я написал простую программу

public final class Example {
    public static void main(String[] args) {
        final String greeting = """Hello
        It's me, Andrew!""";
        System.out.println(greeting);
    }
}

Я ожидал увидеть

Hello
It's me, Andrew!

Я получил сообщение об ошибке компиляции

недопустимая последовательность открытого разделителя текстового блока, отсутствующий терминатор строки

2 ответа

Решение

Контекст вашего текстового блока должен начинаться с новой строки.

public final class Example {
    public static void main(String[] args) {
        final String greeting = """
            Hello
            It's me, Andrew!""";
        System.out.println(greeting);
    }
}

отпечатки

Hello
It's me, Andrew!

Отрывок из JEP 355: Text Blocks (Preview):

Текстовый блок состоит из нуля или более символов содержимого, заключенных в открывающие и закрывающие разделители.

Открывающий разделитель представляет собой последовательность из трех символов двойных кавычек ("""), за которым следует ноль или более пробелов, за которыми следует признак конца строки. Содержимое начинается с первого символа после ограничителя строки открывающего разделителя.

Однако вам не обязательно ставить символ конца строки в конце вашего контента.

Закрывающий разделитель представляет собой последовательность из трех символов двойных кавычек. Содержимое заканчивается последним символом перед первой двойной кавычкой закрывающего разделителя.

final String greeting = """
    Hello
    It's me, Andrew!
    """;

означало бы

Hello
It's me, Andrew!
<an empty line here>

Мне это кажется крайне непонятным, поэтому мне пришлось поделиться этим с сообществом.

Для протокола: обоснование решения не разрешать контент сразу после """ дается здесь

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

Другие вопросы по тегам