本文主要介绍Java中,代替使用‘+’字符串拼接的另一种写法Text Blocks(文本块),下面介绍一下Text Blocks(文本块)使用及示例代码。

html字符串使用‘+’字符串拼接写法

String html = "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";

html字符串使用Text Blocks(文本块)写法

String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";

SQL字符串使用‘+’字符串拼接写法

String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
"WHERE `CITY` = 'INDIANAPOLIS'\n" +
"ORDER BY `EMP_ID`, `LAST_NAME`;\n";

SQL字符串使用Text Blocks(文本块)写法

String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = 'INDIANAPOLIS'
ORDER BY `EMP_ID`, `LAST_NAME`;
""";

执行JS字符串代码‘+’字符串拼接写法

ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("function hello() {\n" +
" print('\"Hello, world\"');\n" +
"}\n" +
"\n" +
"hello();\n");

执行JS字符串使用Text Blocks(文本块)写法

ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("""
function hello() {
print('"Hello, world"');
}
hello();
""");

注意

一个文本块是一种新的文字在Java语言中。它可以用来表示可能出现字符串文字的任何地方的字符串,但是可以提供更高的表现力和更少的意外复杂性。

文本块由零个或多个内容字符组成,并由打开和关闭定界符括起来。

所述开口定界符是三个双引号字符(一个序列"""),接着是零个或多个空格,随后一个行结束。的内容开始于开口分隔符的线路终端器之后的第一个字符。

在结束分隔符是三个引号字符的序列。内容在结束定界符的第一个双引号之前的最后一个字符处结束。

与字符串文字中的字符不同,内容可以直接包含双引号字符。\"允许在文本块中使用,但不是必需或不建议使用。选择粗大的定界符("""),以便"字符可以不转义地显示,并且还可以在视觉上区分文本块和字符串文字。

与字符串文字中的字符不同,内容可以直接包含行终止符。\n允许在文本块中使用,但不是必需或不建议使用。例如,文本块:

"""
line 1
line 2
line 3
"""

等效于字符串文字:

"line 1\nline 2\nline 3\n"

或字符串文字的串联:

"line 1\n" +
"line 2\n" +
"line 3\n"

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

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

官方文档http://openjdk.java.net/jeps/355