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 的特点
- 自动处理换行符: text blocks 会保留字符串中的换行符,无需手动插入
\n。
string text = """
line 1
line 2
line 3
""";
system.out.println(text);
输出:
line 1
line 2
line 3
- 减少转义字符: 在普通字符串中,双引号需要使用反斜杠
\ 转义,而 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>
""";
- 自动去除缩进: text blocks 会根据最左边非空字符的位置自动调整缩进。这使得代码格式化更灵活。
string query = """
select *
from users
where id = 1
""";
system.out.println(query);
输出:
select *
from users
where id = 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.
注意事项
- 结束符必须单独一行: 结束的三引号
""" 必须独占一行,不能与内容在同一行。错误示例:
string text = """
this is a text block""";
正确示例:
string text = """
this is a text block
""";
- 保留换行符: 如果你希望去掉某行的换行符,可以在该行末尾添加反斜杠
\。
string text = """
line 1 \
line 2
""";
system.out.println(text);
输出:
line 1 line 2
- 缩进规则: 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论