Java文本块

文本块是JDK增强建议( JEP 355 ),可以在JDK 13和14中作为预览语言功能使用。它计划在JDK 15中成为永久性功能。文本块是跨越多行并不需要的String文字。对于大多数转义序列。

动机

在标准Java字符串中嵌入XML,JSON或SQL之类的格式会变得很烦人。 例如,由于必须进行转义,因此只有两个键的简单JSON代码片段在Java中几乎无法读取:

 String json = 
         "{\n" + 
             "\"name\": \"john\",\n" + 
             "\"age\": 42\n" + 
         "}" ; 

文本块进行救援

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

 String text = "" " 
         { 
             "name" : "john" , 
             "age" : "42" 
         } 
         "" "; 

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

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

 { 
     "name" : "john" , 
     "age" : "42"  } 

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

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

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

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

这会在我们的JSON代码段中添加4个额外的前导空格。 所以看起来像这样:


     { 
         "name" : "john" , 
         "age" : "42" 
     } 

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

 String text = "" " 
         { 
             "name" : "john" , 
             "age" : "42" 
         } 
     "" "; // <-- moving this 4 spaces to the left produces 4 additional leading spaces 

新的\ <eol>转义序列

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

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

结果是:

 1  2 3 4  5 

转义三引号

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

 String text = "" " 
         Java text blocks start with \ "" " Java text blocks start with \ 
         "" "; 

这将产生:

 Java text blocks start with "" " Java text blocks start with 

摘要

文本块是Java编程语言的不错的补充。 通过支持多行,它们消除了对双引号转义的需要,可以大大提高诸如JSON,XML或SQL之类的嵌入式字符串的可读性。

建议进一步阅读:Brian Goetz的“ 文本块”

与往常一样,您可以在GitHub上找到所有提供的示例。

翻译自: https://www.javacodegeeks.com/2020/06/java-text-blocks-2.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值