JEP 368: Text Blocks
JEP 368: Text Blocks (Second Preview) JDK 13后的第二个预览版)
引入
在Java中,在字符串文字中嵌入HTML,XML,SQL或JSON片段"..."
通常需要先进行转义和串联的大量编辑,然后才能编译包含该片段的代码。该代码段通常难以阅读且难以维护,因此,如果具有一种语言学机制,可以比多行文字更直观地表示字符串,而且可以跨越多行,而且不会出现转义的视觉混乱,那么这将提高广泛Java类程序的可读性和可写性。从JDK 13到JDK 14开始文本块新特性的提出,提高了Java程序书写大段字符串文本的可读性和方便性。
JEP 368:文本块(Text Blocks,第二次预览版)— 文本块作为预览特性首次引入Java 13后收到了众多最终用户的反馈。现在,文本块得到了增强,再次作为预览特性出现在Java 14中,目标成为未来JDK版本的标准特性。使用文本块可以轻松表达跨多行源代码的字符串。它提高了Java程序中以非Java语言编写的代码的字符串的可读性;它约定,任何新构造的文本块都可以用字符串相同的字符集表示,解释相同的转义序列并以与字符串相同的方式进行操作
HTML示例
使用“一维”字符串文字*
如果在字符串的末尾不需要行终止符,则可以将结束定界符放在内容的最后一行。例如,文本块:
""" line 1 line 2 line 3"""
等效于字符串文字:
"line 1\nline 2\nline 3"
文本块可以表示空字符串,尽管不建议这样做,因为它需要两行源代码:
String empty = """ """;
以下是一些格式错误的文本块的示例:
String a = """"""; // no line terminator after opening delimiter String b = """ """; // no line terminator after opening delimiter String c = """ "; // no closing delimiter (text block continues to EOF) String d = """ abc \ def """; // unescaped backslash (see below for escape processing)
SQL
使用原始的字符串语法:
执行结果:
多语言示例
使用原始的字符串语法:
缩进
java编译器会自动删除不需要的缩进:
-
每行结尾的空格都会删除
-
每行开始的共有的空格会自动删除
-
只保留相对缩进。
public static void main(String[] args){ // 1、自动删除不必要的缩进。 System.out.println(""" hello dalianpai text """ ); // 2、会保留相对缩进 System.out.println(""" hello dalianpai text """ ); // 3.整体索进 System.out.println(""" hello dalianpai text """ ); // 4、结束行符在最后面的右边是无效的 System.out.println(""" hello dalianpai text """ );