java文本块以"""包裹多行字符串,java13预览、15正式支持;自动丢弃首尾换行,按最左非空行缩进量裁剪每行前导空白,空行保留;续行、\表反斜杠,转义需显式书写。

Java 的文本块(Text Block)用三对引号 """ 包裹多行字符串,从 Java 13 开始作为预览特性引入,Java 15 正式成为标准特性。它不是简单“换行即保留”,而是有一套明确的缩进处理规则。
文本块的语法结构和基本写法
文本块以 """ 开头,紧接着换行,然后是内容,最后以单独一行的 """ 结尾。开头引号后的第一个换行符会被自动丢弃;结尾引号前的换行符也会被忽略。
例如:
String html = """
<p>Hello</p>
""";
这段代码生成的字符串实际内容不含开头和结尾的换行,但保留中间所有换行与空格。
自动缩进裁剪(Indentation Stripping)
文本块会根据内容中最左的非空白行,确定“公共缩进量”,然后把每行开头的这部分空白全部去掉。这个过程叫“缩进裁剪”,目的是让代码缩进不影响字符串内容。
- 只看内容中非空行(跳过纯空白行),找出它们开头空格/制表符的最小数量
- 每行都减去这个最小数量的空白字符(制表符按 8 个空格算,但实际行为依赖于编辑器显示,建议统一用空格)
- 空行保留原样(不参与缩进计算,也不被裁剪)
比如:
String msg = """
Line 1
Line 2
Line 3""";
三行内容最左非空字符分别在第 4、6、4 列,最小缩进是 4 个空格 → 每行删掉开头 4 个空格,结果为:
显式控制换行与空白:使用 和 \
如果不想某行末尾换行,或想插入反斜杠,可用转义:
- 行末加
表示“续行”,该换行符被忽略(但后面不能有空格) - 想字面量输出
,写成\ -
等传统转义仍有效,但注意:文本块默认不解析普通转义(如就是两个字符和n),除非你显式写成\n或用(后者仅在字符串内生效,不是文本块语法)
示例:
String oneLine = """
hello
world"""; // 结果是 "hello world"(无换行)
常见陷阱和实用建议
- 结尾的
"""必须独占一行,且前面不能有空格,否则会被当成内容的一部分 - 避免混用空格和制表符做缩进,可能导致裁剪不一致(IDE 通常可设为“显示空白字符”来排查)
- 若需保留首行缩进(比如想让第一行也对齐),可在首行加空行,或用
String#indent()后处理 - 文本块适合 HTML、JSON、SQL 等嵌入式多行文本,但不适合拼接动态变量 —— 还得用
String.format()或STR.模板串(Java 21+)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











