Text Blocks:告别字符串拼接地狱
1. 背景:为什么需要 Text Blocks?
在 Java 13 之前,如果你要写一个多行字符串,比如 SQL、JSON、HTML 模板,通常会写成这样:
String sql = "SELECT id, name, age " +"FROM users " +"WHERE status = 'ACTIVE' " +"ORDER BY created_at DESC";
问题显而易见:
- 拼接符号
+
很多,显得冗余。 - 代码格式与原始文本差异大,不直观。
- 引号、换行符、缩进都容易出错。
这就是所谓的 “字符串拼接地狱”。
2. 什么是 Text Blocks?
Java 13 引入了 Text Blocks(文本块) 特性,并在 Java 15 成为正式语言特性。
语法很简单:
- 用
"""
(三个双引号)包裹。 - 自动支持多行。
- 保留文本结构,不需要大量转义。
示例:
String sql = """SELECT id, name, ageFROM usersWHERE status = 'ACTIVE'ORDER BY created_at DESC""";
优势:
- 写法更接近原始 SQL 格式。
- 自动处理换行。
- 代码可读性显著提升。
3. 语法细节
3.1 基本规则
- Text Block 以
"""
开始和结束。 - 结束的
"""
必须单独一行,并且对齐缩进。 - Java 会自动去除 最小公共缩进。
3.2 自动换行
Text Block 中直接写换行,编译器会自动保留:
String message = """Hello,World!""";
// 输出:Hello,\nWorld!
3.3 转义字符
Text Block 仍然支持 \n
、\t
、\"
等转义。
但常见的双引号 "
不再需要转义。
String json = """{"id": 1001,"name": "Alice"}""";
4. 使用场景
4.1 SQL 查询
String query = """SELECT *FROM ordersWHERE amount > 1000AND status = 'PAID'ORDER BY created_at DESC""";
4.2 JSON 模板
String json = """{"user": {"id": 1001,"name": "Bob","roles": ["admin", "user"]}}""";
4.3 HTML / XML
String html = """<html><body><h1>Hello Text Blocks</h1></body></html>""";
4.4 日志模板
String log = """==== Application Error ====Time: %sMessage: %s==========================""".formatted(LocalDateTime.now(), "NullPointerException");
5. 对比:传统写法 vs Text Blocks
传统写法
String json = "{\n" +" \"id\": 1001,\n" +" \"name\": \"Charlie\"\n" +"}";
Text Blocks 写法
String json = """{"id": 1001,"name": "Charlie"}""";
✅ 可读性明显更好,不再被 \n
和 +
搞得眼花缭乱。
6. 总结
- Text Blocks 解决了 Java 字符串拼接冗余、可读性差的问题。
- 特别适合 SQL、JSON、HTML、日志模板 等多行结构化文本。
- 代码更接近文本本身,减少了转义和拼接负担。
从 Java 15 开始,Text Blocks 已经是 正式特性,可以放心使用。
📌 一句话总结:
有了 Text Blocks,Java 程序员终于可以 写出优雅的多行字符串,彻底告别“字符串拼接地狱”!