前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java文本块

Java文本块

作者头像
FunTester
发布2020-07-06 22:59:07
1.7K0
发布2020-07-06 22:59:07
举报
文章被收录于专栏:FunTesterFunTester

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

动机

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

代码语言:javascript
复制
String json =
        "{\n" +
            "\"name\": \"FunTester\",\n" +
            "\"age\": 30\n" +
        "}";

文本块来拯救

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

代码语言:javascript
复制
String text = """
        {
            "name": "FunTester",
            "age": "30"
        }
        """;

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

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

代码语言:javascript
复制
{
    "name": "FunTester",
    "age": "30"
}

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

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

前置空格

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

代码语言:javascript
复制
String text = """
        {
            "name": "FunTester",
            "age": "30"
        }
        """.indent(4);

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

代码语言:javascript
复制
    {
        "name": "FunTester",
        "age": "30"
    }

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

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

新的转义序列

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

代码语言:javascript
复制
String text = """
        1
        2 \
        3 \
        4
        5
        """;

控制台输出:

代码语言:javascript
复制
1
2 3 4
5

转义三引号

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

代码语言:javascript
复制
String text = """
        测试文本 \"""
        """;

控制台输出:

测试文本 """

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动机
  • 文本块来拯救
  • 前置空格
  • 新的转义序列
  • 转义三引号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档