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上找到所有提供的示例。