• Java文本块


    文本块是JDK增强建议(JEP 355),可以在JDK13JDK14中作为预览语言功能使用。它计划在JDK15中成为永久性功能。文本块是一个字符串文字,它跨越多行,并且不需要大多数转义字符。

    动机

    在标准Java字符串中嵌入XMLJSONSQL之类的格式会变得很烦人。例如,由于需要转义,因此只有两个键的简单JSON代码片段在Java中几乎无法流畅阅读:

    String json =
            "{
    " +
                ""name": "FunTester",
    " +
                ""age": 30
    " +
            "}";
    

    文本块来拯救

    使用新的文本块功能,我们可以将代码重写为:

    String text = """
            {
                "name": "FunTester",
                "age": "30"
            }
            """;
    

    使用三引号"""打开和关闭文本块。文本从下一行开始。打开文本块后,该行的其余部分需要保持空白。

    如果我们将此字符串打印到控制台,我们将看到:

    {
        "name": "FunTester",
        "age": "30"
    }
    

    可能你已经注意到,左侧的缩进已被去除。这是因为文本块的处理分为三个步骤:

    • 行终止符被标准化为LF字符。这样可以避免不同平台(例如WindowsUnix)之间的兼容性问题。
    • 附带的前置空格和所有尾随空格均被删除。偶然的前导空格是通过找到所有行的前导空格的公共数量来确定的。
    • 转义序列被解释。文本块可以包含与标准字符串相同的转义序列(例如 )。请注意,已经添加了两个新的转义序列:s用于显式空间,<eol>作为连续指示符(稍后在<eol>上有更多介绍)。

    前置空格

    如果我们明确需要前置空格,则可以使用indent()方法:

    String text = """
            {
                "name": "FunTester",
                "age": "30"
            }
            """.indent(4);
    

    这会将4个额外的前导空格添加到我们的JSON代码段中。控制台输出看起来像这样:

        {
            "name": "FunTester",
            "age": "30"
        }
    

    或者,我们可以从封闭的三引号中删除4个前导空格以产生相同的结果:

    String text = """
            {
                "name": "FunTester",
                "age": "30"
            }
        """; // 将这4个空格向左移动会产生4个额外的前导空格
    

    新的转义序列

    使用新的转义序列,我们可以将单行的内容拆分为多行,而无需创建实际的行终止符。

    String text = """
            1
            2 
            3 
            4
            5
            """;
    

    控制台输出:

    1
    2 3 4
    5
    

    转义三引号

    如果我们需要在文本块中写入三引号,则只需要转义第一引号即可:

    String text = """
            测试文本 """
            """;
    

    控制台输出:

    测试文本 """


    • 公众号FunTester首发,更多原创文章:FunTester410+原创文章,欢迎关注、交流,禁止第三方擅自转载。

    热文精选

  • 相关阅读:
    推荐系统(二)
    应用高斯分布来解决异常检测问题(三)
    应用高斯分布来解决异常检测问题(二)
    应用高斯分布来解决异常检测问题(一)
    高斯(正态)分布、GDA、Mixtures of Gaussian
    主成分分析
    logistic回归
    推荐系统(一)
    基于朴素贝叶斯模型的文本分类
    K均值聚类算法
  • 原文地址:https://www.cnblogs.com/FunTester/p/13204579.html
Copyright © 2020-2023  润新知