文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 中的 3 个双引号是什么语法?Java 15 刷新你的认知!

2024-12-14 05:25

关注

一、前言

在 Java 15 的推出的时候,Text Blocks 正式转正,我叫它 “文本块” 好了,栈长也做了简单介绍,没看过的可以点击这里看下。

文本块,是一个多行字符串,它可以避免使用大多数转义符号,自动以可预测的方式格式化字符串,并让开发人员在需要时可以控制格式。

文本块最早准备在 JDK 12 添加的,但最终撤消了,然后在 JDK 13 中作为预览特性进行了添加,然后又在 JDK 14 中再次预览,在 JDK 15 中,文本块终于转正,暂不再做进一步的更改。

二、示例

来看下这个 HTML 语言示例你就懂了:

  1. String html1 = "\n" + 
  2.               "    \n" + 
  3.               "        

    Hi, Java技术栈

    \n"
     + 
  4.               "        

    欢迎关注,分享更多干货

    \n"
     + 
  5.               "    \n" + 
  6.               "\n"

 

使用 Text Blocks:

  1. String html2 = ""
  2.                
  3.                    
  4.                       

    Hi, Java技术栈

     
  5.                       

    欢迎关注,分享更多干货

     
  6.                    
  7.                
  8.               """; 

 

文本块需要用三个双引号包起来,熟悉 Python 的都知道,三个双引号表示多行注释,没想到 Java 竟然用作了多行字符串……

再来看下字节码:

 

看到了吧?文本块编译后会自动添加换行符,和原始的拼接写法编译结果一致,再也不用再拼接字符串了。

三、详细介绍

其实文本块的作用远不止换行符这么简单,下面栈长详细介绍下。

1、Line terminators(换行符)

如上面介绍,编译期自动增加换行符可以用来增强用非 Java 语言编写的代码的字符串的可读性,比如我们经常要拼接 HTML、XML、SQL 语言代码等,代码非常难看。

  1. ""
  2. Java 
  3. line 2 
  4. line 3 
  5. ""

就等同于:

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

或者:

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

如果最后一行不需要换行,可以这么写:

  1. ""
  2. line 1 
  3. line 2 
  4. line 3""

还可以定义一个空的文本块:

  1. String empty = ""
  2. """; 

一个空字符串也需要两行代码,所以这个方式是不推荐使用的。

2、Incidental white space(空格编排)

继续看上面那段代码:

 

注意这根线没有,线前面有一排空格,意味着是不会被编译进去的,只是用来缩进格式化方便阅读,所以我叫它空格编排。

如果 """ 在最后单独占一排,则以它左对齐,否则以最靠左的一列左对齐。

 


 

 

IDEA 真是强大啊,对 JDK 15 都支持这么好了。如果你说没激活码,这都不是事,可以关注公众号Java技术栈,回复:idea,栈长教你免费获取正版。

另外,Java 15 中新增了 String.stripIndent 实例方法,可以直接删除每一行的开头和结尾空白字符。

3、Escape sequences(转义字符)

如下面代码所示:

 

我在代码中又增加了 \s、\n、\t 之类的转义字符,可以直接拿来用,双引号也不需要转义。

结果输出:

  1.  
  2.      
  3.         

    Hi,  "Java技术栈"

     
  4.  
  5.  
  6.         

    欢迎关注,\分享"更多"干货

     
  7.      
  8.     

 

实际工作中可能出现的 SQL 语句的拼写就有救了!

不使用 Text Blocks:

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

使用 Text Blocks:

  1. String query = ""
  2.                SELECT "EMP_ID""LAST_NAME" FROM "EMPLOYEE_TB" 
  3.                WHERE "CITY" = 'INDIANAPOLIS' 
  4.                ORDER BY "EMP_ID""LAST_NAME"
  5.                """; 

当然,拼接 SQL 要注意别造成 SQL 注入漏洞了,这里只是介绍使用。

另外,Java 15 新增了一个 String.translateEscapes 转义方法,可以直接对字符串内容进行转义。

4、格式化参数

Java 15 之前格式化字符串中的参数需要使用 String.format 静态方法,感觉不是很方便,而在 Java 15 中新增了直接格式化字符串的方法:

 

对上面的 SQL 语句进行扩展下,参数使用占位符进行格式化:

  1. String query = ""
  2.                SELECT "EMP_ID""LAST_NAME" FROM "EMPLOYEE_TB" 
  3.                WHERE "CITY" = '%s' AND author = '%s' 
  4.                ORDER BY "EMP_ID""LAST_NAME"
  5.                """; 
  6.         System.out.println(query.formatted("深圳""栈长")); 

结果输出:

  1. SELECT "EMP_ID""LAST_NAME" FROM "EMPLOYEE_TB" 
  2. WHERE "CITY" = '深圳' AND author = '栈长' 
  3. ORDER BY "EMP_ID""LAST_NAME"

直接使用字符串对象的 formatted 实例方法感觉更方便了!

四、结语

解读 Text Blocks(文本块)远比想象中要难很多,没想到一个文本块这么多细节,文中只是对文本块作了一个部分总结,并不是文本块的全部内容,反正暂时也用不到,大家简单了解即可。

对文本块感兴趣的、想深入了解更多文本块细节的同学,可以参考官方说明:

https://openjdk.java.net/jeps/378

官方介绍文本块用了 3 万多字……可想而知解读它的难度。

本文转载自微信公众号「Java技术栈」,可以通过以下二维码关注。转载本文请联系Java技术栈公众号。 

 

来源:Java技术栈 内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯