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

相关推荐
Seven9731 分钟前
SPI机制:服务扩展的核心技术
java
开心就好202540 分钟前
iOS Crash日志全面解析:结构、类型与分析方法
后端
NE_STOP40 分钟前
shiro_实现分布式会话SessionManager、限制密码重试次数和并发登录控制
java
Seven9743 分钟前
剑指offer-63、数据流中的中位数
java
毕设源码-钟学长1 小时前
【开题答辩全过程】以 基于Spring Boot的社区养老服务管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
nbsaas-boot1 小时前
slice / map 在 Go GC 与内存碎片上的真实成本
开发语言·后端·golang
数据小馒头1 小时前
拒绝循环写库:MySQL 批量插入、Upsert 与跨表更新的高效写法
后端
子洋1 小时前
基于远程开发的大型前端项目实践
运维·前端·后端
攀登的牵牛花1 小时前
前端向架构突围系列 - 框架设计(七):反应式编程框架Flower的设计
前端·架构
mjhcsp1 小时前
C++ Manacher 算法:原理、实现与应用全解析
java·c++·算法·manacher 算法