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 SpringAI+阿里云百炼应用开发
java·开发语言·阿里云
钱多多_qdd1 小时前
ListUtil#split和remove搭配使用的坑
java
碧蓝的水壶1 小时前
数据转换过程
java·开发语言·windows
2501_947575807 小时前
计算机毕业设计之jsp开山车行二手车交易系统
java·开发语言·hadoop·python·信息可视化·django·课程设计
国科安芯7 小时前
ASC4T245S分组双向控制架构深度解析:独立DIR/OE控制、QFN16封装与混合方向总线桥接
单片机·嵌入式硬件·物联网·fpga开发·架构·risc-v
骑士雄师7 小时前
java面试题 4:鉴权
java·开发语言
独孤九剑打醒他8 小时前
双层Master-Worker软硬协同调度架构:从根源解决分布式数据一致性难题
后端·嵌入式硬件·硬件架构·硬件工程
派叔8 小时前
老字号营销服务商技术解构:三类方案的架构逻辑与选型评估
大数据·人工智能·搜索引擎·架构·产品运营·流量运营
帅次9 小时前
Android 高级工程师面试:Java 基础知识 近1年高频追问 22 题
android·java·面试
蓝胖的四次元口袋9 小时前
Java集合(4)
java·哈希算法