【问题标题】:illegal text block open delimiter sequence, missing line terminator非法文本块打开分隔符序列,缺少行终止符
【发布时间】:2019-09-09 11:35:31
【问题描述】:

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!

我得到的是一个编译错误提示

非法文本块打开分隔符序列,缺少行终止符

【问题讨论】:

    标签: java string delimiter java-13


    【解决方案1】:

    文本块的上下文必须从新行开始。

    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>
    

    我发现它非常不清楚,所以我不得不与社区分享。

    【讨论】:

      【解决方案2】:

      记录在案,a rationale for the decision not to allow content immediately after """ is given here

      这样做的原因是文本块主要设计用于支持多行字符串,并且要求初始行终止符简化了缩进处理规则

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2021-10-16
        • 2019-02-06
        • 2022-01-20
        • 2013-09-26
        相关资源
        最近更新 更多