文字块:怎么编写所见即所得的字符串

文字块的概念很简单,它是一个由多行文字构成的字符串。

出现在文字块开始和结束位置的,是三个双引号序列;而不是我们在字符串声明里看到的单个双引号。 文字块由零个或多个内容字符组成,从开始分隔符开始,到结束分隔符结束。

开始分隔符是由三个双引号字符 (""") ,后面跟着的零个或多个空格,以及行结束符组成的序列。结束分隔符是一个由三个双引号字符 (""") 组成的序列。

结束分隔符只有一个由三个双引号字符组成的序列。结束分隔符之前的字符,包括换行符,都属于文字块的有效内容。

js 复制代码
jshell> String s = """
   ...> OneLine""";
s ==> "OneLine"



jshell> String s = """
   ...> TwoLines
   ...> """;
s ==> "TwoLines\n"

不同于传统字符串的是,在编译期,文字块要顺序通过如下三个不同的编译步骤:

  1. 为了降低不同平台间换行符的表达差异,编译器把文字内容里的换行符统一转换成 LF(\u000A);
  2. 为了能够处理 Java 源代码里的缩进空格,要删除所有文字内容行和结束分隔符共享的前导空格,以及所有文字内容行的尾部空格;
  3. 最后处理转义字符,这样开发人员编写的转义序列就不会在第一步和第二步被修改或删除。

文字块是在编译期处理的,并且在编译期被转换成了常量字符串,然后就被当作常规的字符串了。所以,如果文字块代表的内容,和传统字符串代表的内容一样,那么这两个常量字符串变量就指向同一内存地址,代表同一个对象。

为了能够支持尾部附带的空格,文字块还引入了另外一个新的转义字符,'\s',空格转义符。空格转义符表示一个空格。我们前面说过的文字块的编译器处理顺序,空格转义符不会在文字块的编译期被删除,因此空格转义符之前的空格也能被保留。所以,每一行使用一个空格转义符也就足够了。


此文章为9月Day4学习笔记,内容来源于极客时间《深入剖析 Java 新特性》

相关推荐
若阳安好7 分钟前
【备忘录】正则表达式
后端·正则表达式·restful
Cosolar31 分钟前
AI Agent 的记忆战争:OpenClaw vs Hermes vs QwenPaw vs HiClaw,谁真正"记得住"?
人工智能·后端·面试
M ? A1 小时前
VuReact:Vue转React的增量编译利器
前端·vue.js·后端·react.js·面试·开源·vureact
aircrushin1 小时前
给宝宝办了个宴,朋友用trae做的工具帮了大忙
前端·后端
码上小翔哥1 小时前
Jackson 配置深度解析
java·后端
程序员Sunday1 小时前
爆肝万字!这应该是全网最全的 Codex 实战教程了
前端·后端·ai编程
aircrushin1 小时前
朋友用trae搭建的工具,解决了旅行拍照共享的大事儿
前端·后端
星栈1 小时前
把业务逻辑写成纯函数之后,我再也不想写 Service 层了
后端·开源
未秃头的程序猿1 小时前
如何用 AI 写出符合规范的 Java 代码?我总结了 7 条有效建议
java·后端·ai编程
阿聪谈架构1 小时前
第10章:Agent 记忆系统 —— 让 AI 真正"记住"你
人工智能·后端