Java中的3个双引号是什么语法?Java15刷新你的认知!
Java 中的 3 个双引号 """ 是什么语法?
这是 Java 15 新出的,刷新你的认知!
⼀、前⾔
在的推出的时候,Text Blocks正式转正,我叫它 “⽂本块” 好了,栈长也做了简单介绍,没看过的可以点击看下。
⽂本块,是⼀个多⾏字符串,它可以避免使⽤⼤多数转义符号,⾃动以可预测的⽅式格式化字符串,并让开发⼈员在需要时可以控制格式。
⽂本块最早准备在 JDK 12 添加的,但最终撤消了,然后在 JDK 13 中作为预览特性进⾏了添加,然后⼜在 JDK 14 中再次预览,在 JDK 15 中,⽂本块终于转正,暂不再做进⼀步的更改。
⼆、⽰例
来看下这个 HTML 语⾔⽰例你就懂了:
不使⽤ Text Blocks::
String html1 = "<html>\n" +
" <body>\n" +
" <p>Hi, Java技术栈</p>\n" +
" <p>欢迎关注,分享更多⼲货</p>\n" +
" </body>\n" +
"</html>\n";
使⽤ Text Blocks:
String html2 = """
<html>
<body>
<p>Hi, Java技术栈</p>
<p>欢迎关注,分享更多⼲货</p>
</body>
</html>
""";
⽂本块需要⽤三个双引号包起来,熟悉 Python 的都知道,三个双引号表⽰多⾏注释,没想到 Java 竟然⽤作了多⾏字符串……
再来看下字节码:
看到了吧?⽂本块编译后会⾃动添加换⾏符,和原始的拼接写法编译结果⼀致,再也不⽤再拼接字符串了。
三、详细介绍
其实⽂本块的作⽤远不⽌换⾏符这么简单,下⾯栈长详细介绍下。
1、Line terminators(换⾏符)
如上⾯介绍,编译期⾃动增加换⾏符可以⽤来增强⽤⾮ Java 语⾔编写的代码的字符串的可读性,⽐如我们经常要拼接 HTML、XML、SQL 语⾔代码等,代码⾮常难看。
"""
Java
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"""
还可以定义⼀个空的⽂本块:
String empty = """
""";
⼀个空字符串也需要两⾏代码,所以这个⽅式是不推荐使⽤的。
2、Incidental white space(空格编排)
继续看上⾯那段代码:
注意这根线没有,线前⾯有⼀排空格,意味着是不会被编译进去的,只是⽤来缩进格式化⽅便阅读,所以我叫它空格编排。
如果 """ 在最后单独占⼀排,则以它左对齐,否则以最靠左的⼀列左对齐。
IDEA 真是强⼤啊,对 JDK 15 都⽀持这么好了。如果你说没激活码,这都不是事,可以关注Java技术栈,回复:idea,栈长教你免费获取正版。另外,Java 15 中新增了String.stripIndent实例⽅法,可以直接删除每⼀⾏的开头和结尾空⽩字符。
3、Escape sequences(转义字符)
如下⾯代码所⽰:
我在代码中⼜增加了\s、\n、\t之类的转义字符,可以直接拿来⽤,双引号也不需要转义。
结果输出:
<html>
<body>
<p>Hi, "Java技术栈"</p>
<p>欢迎关注,\分享"更多"⼲货</p>
</body>
</html>
实际⼯作中可能出现的 SQL 语句的拼写就有救了!
不使⽤ Text Blocks:
String query = "SELECT \"EMP_ID\", \"LAST_NAME\" FROM \"EMPLOYEE_TB\"\n" +
"WHERE \"CITY\" = 'INDIANAPOLIS'\n" +
"ORDER BY \"EMP_ID\", \"LAST_NAME\";\n";
使⽤ Text Blocks:
String query = """
SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"
WHERE "CITY" = 'INDIANAPOLIS'
ORDER BY "EMP_ID", "LAST_NAME";
""";
当然,拼接 SQL 要注意别造成 SQL 注⼊漏洞了,这⾥只是介绍使⽤。
另外,Java 15 新增了⼀个anslateEscapes转义⽅法,可以直接对字符串内容进⾏转义。
4、格式化参数
Java 15 之前格式化字符串中的参数需要使⽤String.format静态⽅法,感觉不是很⽅便,⽽在 Java 15 中新增了直接格式化字符串的⽅法:
对上⾯的 SQL 语句进⾏扩展下,参数使⽤占位符进⾏格式化:
String query = """
SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"
WHERE "CITY" = '%s' AND author = '%s'
ORDER BY "EMP_ID", "LAST_NAME";
""";
System.out.println(query.formatted("深圳", "栈长"));
结果输出:
SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"
WHERE "CITY" = '深圳' AND author = '栈长'
ORDER BY "EMP_ID", "LAST_NAME";
直接使⽤字符串对象的formatted实例⽅法感觉更⽅便了!
四、结语
解读 Text Blocks(⽂本块)远⽐想象中要难很多,没想到⼀个⽂本块这么多细节,⽂中只是对⽂本块作了⼀个部分总结,并不是⽂本块的全部内容,反正暂时也⽤不到,⼤家简单了解即可。
对⽂本块感兴趣的、想深⼊了解更多⽂本块细节的同学,可以参考官⽅说明:
官⽅介绍⽂本块⽤了 3 万多字……可想⽽知解读它的难度。
本次栈长的分享就到这⾥了,希望对⼤家有⽤。觉得不错,在看、转发分享⼀下哦~java技术栈图
最后,Java 系列教程还会继续更新,关注Java技术栈第⼀时间推送,还可以在菜单中获取历史 Java 教程,都是⼲货。近期热⽂推荐:
1.
2.
3.
4.
5.
觉得不错,别忘了随⼿点赞+转发哦!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论