Java17新特性之Text Blocks文本块的使用

 更新时间:2025年10月01日 11:14:58   作者:自由的疯  
Java 17引入了Text Blocks(文本块)特性,这是Java语言中一种新的字符串表示方式,本文就来详细的介绍一下文本块的使用,感兴趣的可以了解一下

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

Text Blocks 的基本用法

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

示例:

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

输出:

{
    "name": "Alice",
    "age": 25,
    "city": "New York"
}

Text Blocks 的特点

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

输出:

Line 1
Line 2
Line 3

  1. 减少转义字符: 在普通字符串中,双引号需要使用反斜杠 ​​\​​ 转义,而 Text Blocks 不需要。
// 普通字符串
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 会根据最左边非空字符的位置自动调整缩进。这使得代码格式化更灵活。
String query = """
        SELECT *
        FROM users
        WHERE id = 1
        """;
System.out.println(query);

输出:

SELECT *
FROM users
WHERE id = 1

  1. 支持表达式嵌入: 和普通字符串一样,Text Blocks 支持嵌入表达式,使用 ​​%d​​ 格式。
int age = 25;
String message = """
    Hello, my name is Alice.
    I am %d years old.
    """.formatted(age);
System.out.println(message);

输出:

Hello, my name is Alice.
I am 25 years old.

注意事项

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

正确示例:

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

输出:

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

到此这篇关于Java17新特性之Text Blocks文本块的使用的文章就介绍到这了,更多相关Java17新特性Text Blocks内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java把Map转为对象的实现代码

    Java把Map转为对象的实现代码

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,但这里,我想通过反射的方式对他们做转化,感兴趣的同学跟着小编来看看吧
    2023-08-08
  • java抓取12306信息实现火车余票查询示例

    java抓取12306信息实现火车余票查询示例

    这篇文章主要介绍了java抓取12306信息实现火车余票查询示例,需要的朋友可以参考下
    2014-04-04
  • IntelliJ IDEA 部署 Web 项目,看这一篇够了!

    IntelliJ IDEA 部署 Web 项目,看这一篇够了!

    这篇文章主要介绍了IntelliJ IDEA 部署 Web 项目的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • MyBatis-Plus自动填充功能失效导致的原因及解决

    MyBatis-Plus自动填充功能失效导致的原因及解决

    这篇文章主要介绍了MyBatis-Plus自动填充功能失效导致的原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java参数按值传递示例演示

    Java参数按值传递示例演示

    在Java中,方法参数的传递方式实际上是按值传递,接下来通过本文给大家介绍了Java参数按值传递示例演示,需要的朋友可以参考下
    2023-09-09
  • java实现超大文件的读写功能

    java实现超大文件的读写功能

    这篇文章主要为大家详细介绍了java实现超大文件的读写功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Spring AbstractRoutingDatasource 动态数据源的实例讲解

    Spring AbstractRoutingDatasource 动态数据源的实例讲解

    本文介绍如何使用 Spring AbstractRoutingDatasource 基于上下文动态切换数据源,因此我们会让查找数据源逻辑独立于数据访问之外
    2021-07-07
  • 关于@ComponentScan TypeFilter自定义指定扫描bean的规则

    关于@ComponentScan TypeFilter自定义指定扫描bean的规则

    这篇文章主要介绍了关于@ComponentScan TypeFilter自定义指定扫描bean的规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java MD5消息摘要算法原理及实现代码

    Java MD5消息摘要算法原理及实现代码

    这篇文章主要介绍了Java MD5消息摘要算法原理及实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • JDBC三层架构深入刨析

    JDBC三层架构深入刨析

    三层架构是一种软件设计架构,是一种组织代码的手段和方法,三层架构的优点是扩展性好,复用性高;缺点是步骤多,比较繁琐;代码多,效率降低
    2022-12-12

最新评论