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示例

使用“一维”字符串文字*

 

 文本块是Java语言的新语法,可以用来表示任何字符串,具有更高的表达能力和更少的复杂度。文本块的开头定界符是由三个双引号 """ 开始,从新的一行开始字符串的内容。这里的新起的这行不属于字符串,只表示内容开始,是语法的一部分。以 """ 结束。 """ 可以紧跟字符串内容,也可以另起一行。另起一行时,字符串内容最后会留有一新行。

 

 如果在字符串的末尾不需要行终止符,则可以将结束定界符放在内容的最后一行。例如,文本块:

"""
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 
						"""
            );

posted @ 2020-04-27 20:00  天宇轩-王  阅读(201)  评论(0编辑  收藏  举报