Java 17 新特性之 Text Blocks(文本块)

Java 17 引入了 Text Blocks(文本块) 特性,这是 Java 语言中一种新的字符串表示方式,旨在简化多行字符串的创建和处理。它通过减少转义字符的需求,使代码更加简洁、易读。


Text Blocks 的基本用法

Text Blocks 使用三个双引号 ​​"""​​ 来界定字符串内容。与普通字符串不同,Text Blocks 可以跨多行,并且保留字符串中的换行符和缩进。

示例:

ini 复制代码
String json = """
    {
        "name": "Alice",
        "age": 25,
        "city": "New York"
    }
    """;
System.out.println(json);

输出:

json 复制代码
{
    "name": "Alice",
    "age": 25,
    "city": "New York"
}

Text Blocks 的特点

  1. 自动处理换行符 : Text Blocks 会保留字符串中的换行符,无需手动插入 ​\n​
ini 复制代码
String text = """
    Line 1
    Line 2
    Line 3
    """;
System.out.println(text);

输出:

scss 复制代码
Line 1
Line 2
Line 3
  1. 减少转义字符 : 在普通字符串中,双引号需要使用反斜杠 ​\​ 转义,而 Text Blocks 不需要。
ini 复制代码
// 普通字符串
String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, World!</p>\n" +
              "    </body>\n" +
              "</html>";

// 使用 Text Blocks
String htmlBlock = """
    <html>
        <body>
            <p>Hello, World!</p>
        </body>
    </html>
    """;
  1. 自动去除缩进: Text Blocks 会根据最左边非空字符的位置自动调整缩进。这使得代码格式化更灵活。
ini 复制代码
String query = """
        SELECT *
        FROM users
        WHERE id = 1
        """;
System.out.println(query);

输出:

sql 复制代码
SELECT *
FROM users
WHERE id = 1
  1. 支持表达式嵌入 : 和普通字符串一样,Text Blocks 支持嵌入表达式,使用 ​${}​ 格式。
ini 复制代码
int age = 25;
String message = """
    Hello, my name is Alice.
    I am %d years old.
    """.formatted(age);
System.out.println(message);

输出:

erlang 复制代码
Hello, my name is Alice.
I am 25 years old.

注意事项

  1. 结束符必须单独一行 : 结束的三引号 ​"""​ 必须独占一行,不能与内容在同一行。错误示例:
ini 复制代码
String text = """
    This is a text block""";

正确示例:

ini 复制代码
String text = """
    This is a text block
    """;
  1. 保留换行符 : 如果你希望去掉某行的换行符,可以在该行末尾添加反斜杠 ​\​
ini 复制代码
String text = """
    Line 1 \
    Line 2
    """;
System.out.println(text);

输出:

scss 复制代码
Line 1 Line 2
  1. 缩进规则 : Text Blocks 会根据最左边非空字符的位置自动调整缩进,但你可以通过工具类(如 ​String.stripIndent()​​String.translateEscapes()​)手动控制缩进。

适用场景

  • JSON 和 XML 数据:Text Blocks 非常适合用来定义 JSON、XML 等多行数据格式。
  • SQL 查询:可以轻松编写复杂的 SQL 查询语句。
  • HTML 和 CSS:用于生成 HTML 页面或 CSS 样式表。
  • 多行日志消息:在日志记录中生成格式化的多行消息。

总结

Text Blocks 是 Java 17 中一个非常实用的特性,特别适用于处理多行字符串。它减少了转义字符的使用,提升了代码的可读性和维护性。

相关推荐
寻星探路1 分钟前
常用排序方法
java·开发语言·算法
青云交4 分钟前
Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备故障预测与智能运维中的应用(384)
java·大数据·物联网·flink·设备故障预测·智能运维·实时流处理
半桔15 分钟前
【STL源码剖析】从源码看 vector:底层扩容逻辑与内存复用机制
java·开发语言·c++·容器·stl
洛卡卡了26 分钟前
面试官问限流降级,我项目根本没做过,咋办?
后端·面试·架构
慕y27427 分钟前
Java学习第一百零九部分——Jenkins(一)
java·学习·jenkins
ezl1fe1 小时前
RAG 每日一技(十四):化繁为简,统揽全局——用LangChain构建高级RAG流程
人工智能·后端·算法
悟能不能悟1 小时前
cdn是什么
java
amazingCompass1 小时前
Java 开发必备技能:深入理解与实战 IntelliJ IDEA 中的 VM Options
后端
爱科研的瞌睡虫1 小时前
C++线程中 detach() 和 join() 的区别
java·c++·算法
每天的每一天1 小时前
分布式文件系统05-生产级中间件的Java网络通信技术深度优化
java·开发语言·中间件