当前位置: 首页 > news >正文

Java入门到精通Java 15中的 3 个双引号语法

Java 中的 3 个双引号 """ 是什么语法?

这是 Java 15 新出的,刷新你的认知!

  • 前言

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

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

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

  • 示例

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

不使用 Text Blocks::

String html1 = "\n" +

" \n" +

"

Hi, Java技术栈

\n" +

"

欢迎关注,分享更多干货

\n" +

" \n" +

"\n";

使用 Text Blocks:

String html2 = """

Hi, Java技术栈

欢迎关注,分享更多干货

""";

文本块需要用三个双引号包起来,熟悉 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 之类的转义字符,可以直接拿来用,双引号也不需要转义。

结果输出:

Hi, "Java技术栈"

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

实际工作中可能出现的 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 新增了一个 String.translateEscapes 转义方法,可以直接对字符串内容进行转义。

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

文章来源:网络 版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

http://www.jsqmd.com/news/1082942/

相关文章:

  • 基于VisionPro Blob分析的地面裂痕视觉检测实战指南
  • Java毕设项目:基于 SpringBoot 的企业人事信息信息化管理平台的设计与实现 (源码+文档,讲解、调试运行,定制等)
  • Box64终极指南:让ARM设备也能畅玩x86游戏的秘诀
  • 深度解析AU-60全功能AI语音处理模组:100dB回音消除+90dB AI降噪的工业级音频方案
  • UIEB数据集:水下图像增强算法评估的基准与实战指南
  • 【课程设计/毕业设计】基于Java+springboot的热门电影网站观看的设计与实现【附源码、数据库、万字文档】
  • Nintendo Switch游戏文件终极管理工具:NSC_BUILDER完全指南 [特殊字符]
  • Steam Achievement Manager成就显示异常的5种根本原因与解决方案
  • QKeyMapper:你的Windows输入设备终极指挥官
  • 把公司文档喂给 AI,Ryzen AI 实现私有知识库问答
  • Go 语言并发核心:深入理解 Goroutine
  • 终极指南:零成本解锁Grammarly Premium高级版完整使用方案
  • 如何快速构建个性化桌面数字伙伴:DyberPet开源框架终极指南
  • Gemma 2实战部署与分层蒸馏:从滑动窗口到MMLU Pro验证
  • 荧光共振能量转移(FRET)原理与应用浅析
  • 安卓聚合应用,汇聚全球资源!儿歌app推荐
  • 3分钟极速安装:Windows用户必备的苹果设备驱动解决方案
  • Adobe-GenP 3.0:三步解锁Adobe全家桶完整功能指南
  • [智能体-511]:Step4:让 Bot 工作、有章法、固化最佳实践|图文生成视频 完整详解
  • 百度网盘秒传脚本终极指南:5分钟掌握永久文件分享的黑科技
  • 5分钟快速上手:浏览器资源嗅探神器Cat-Catch终极指南
  • 分布式图数据库StellarDB5.0:万物互联,一触即“答”
  • 从“预测下一个词”到“预测下一个物理状态”:一文读懂世界模型的技术原理、产业布局与实战价值
  • SO-FSCL算法:极化码软输出解码原理与工程实现详解
  • DailyTech-20260625
  • OpenCore Legacy Patcher终极教程:让老Mac焕发新生体验最新macOS
  • LangChain 家族生态全解析:从框架到企业级平台的选择指南
  • 如何用Python快速获取A股行情数据?mootdx完整指南
  • SD-PPP插件:Photoshop AI革命,免费解锁无限创意潜能
  • 留子写 essay 怕中式英语 / 格式错?Gradpaper 适配海外高校标准,自动生成规范引用