Java 15 中的标准功能:文本块
Java 在版本 15 中将文本块作为标准功能引入,以处理多行字符串,如 JSON/XML/HTML 等。它最早是在 Java 13 中作为一个预览特性推出的。
文本块允许轻松地书写多行字符串而不需要使用 \r\n
进行换行。
文本块字符串具有与普通字符串(String 类的方法)相同的方法,例如 contains()
、indexOf()
和 length()
函数。
引入文本块的主要目的是更高效地声明多行字符串。在此之前,可以通过字符串拼接、字符串构建器的 append
方法或字符串的 join
方法来声明多行字符串,但是这种方法相当繁琐,因为必须使用行终止符和分隔符来标记新的一行。文本块提供了一种更好的替代方案,定义多行字符串只需要使用三个双引号("""
)来标记。
文本块语法
文本块是对现有字符串对象的一种增强,其特殊语法是字符串内容以 """
开头并以换行符开始,以 """
结束。"""
之间的任何内容都将按原样使用。
String textBlockJSON = """
{
"name" : "Mahesh",
"RollNO" : "32"
}
""";
等效的字符串可以使用旧的语法如下面所示:
String stringJSON = "{\r\n"
+ " \"Name\" : \"Mahesh\",\r\n"
+ " \"RollNO\" : \"32\"\r\n"
+ "}";
示例:Java 文本块
在这个例子中,我们打印了使用文本块以及使用字符串拼接的 JSON 字符串。
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
String stringJSON = "{\r\n"
+ " \"Name\" : \"Mahesh\",\r\n"
+ " \"RollNO\" : \"32\"\r\n"
+ "}";
System.out.println(stringJSON);
String textBlockJSON = """
{
"name" : "Mahesh",
"RollNO" : "32"
}
""";
System.out.println(textBlockJSON);
}
}
输出
编译并运行上面的程序,将会得到如下结果:
{
"Name" : "Mahesh",
"RollNO" : "32"
}
{
"name" : "Mahesh",
"RollNO" : "32"
}
文本块字符串操作
文本块与普通字符串相同,并且可以使用 equals()
方法或 ==
运算符进行比较。
textBlockJSON.equals(stringJSON);
textBlockJSON == stringJSON;
文本块支持所有的字符串操作,如 indexOf()
、contains()
等。
textBlockJSON.contains("Mahesh");
textBlockJSON.length();
示例:Java 中的文本块字符串操作
在这个例子中,我们执行了各种字符串操作,并将文本块与等效的字符串进行了比较。
package com.tutorialspoint;
public class Tester {
public static void main(String[] args) {
String stringJSON = "Mahesh";
String textBlockJSON = """
Mahesh""";
System.out.println(textBlockJSON.equals(stringJSON));
System.out.println(textBlockJSON == stringJSON);
System.out.println("Contains: " + textBlockJSON.contains("Mahesh"));
System.out.println("indexOf: " + textBlockJSON.indexOf("Mahesh"));
System.out.println("Length: " + textBlockJSON.length());
}
}
输出
编译并运行上面的程序,将会得到如下结果:
true
true
Contains: true
indexOf: 0
Length: 6
文本块方法
-
stripIndent()
- 移除字符串开头和结尾的空白字符。
-
translateEscapes()
- 根据字符串语法转义转义序列。
-
formatted()
- 类似于 String format()
方法,支持在文本块字符串中进行格式化。
示例
考虑以下示例:
ApiTester.java
public class APITester {
public static void main(String[] args) {
String textBlockJSON = """
{
"name" : "%s",
"RollNO" : "%s"
}
""".formatted("Mahesh", "32");
System.out.println(textBlockJSON);
}
}
输出
{
"name" : "Mahesh",
"RollNO" : "32"
}