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 中一个非常实用的特性,特别适用于处理多行字符串。它减少了转义字符的使用,提升了代码的可读性和维护性。

相关推荐
青云交38 分钟前
Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式电源接入与电力系统稳定性维护中的应用(404)
java·大数据·分布式·智能电网·flink 实时流处理·kafka 数据采集·iec 61850 协议
fured1 小时前
[调试][实现][原理]用Golang实现建议断点调试器
开发语言·后端·golang
仰望星空@脚踏实地1 小时前
maven scope 详解
java·maven·scope
bobz9651 小时前
linux cpu CFS 调度器有使用 令牌桶么?
后端
bobz9652 小时前
linux CGROUP CPU 限制有使用令牌桶么?
后端
M_Reus_112 小时前
Groovy集合常用简洁语法
java·开发语言·windows
带刺的坐椅2 小时前
10分钟带你体验 Solon 的状态机
java·solon·状态机·statemachine
小鹅叻2 小时前
MyBatis题
java·tomcat·mybatis
RainbowSea2 小时前
4. LangChain4j 模型参数配置超详细说明
java·langchain·ai编程
RainbowSea2 小时前
3. LangChain4j + 低阶 和 高阶 API的详细说明
java·llm·ai编程