文本块在jdk13中第一次预览,jdk14第二次预览,jdk15正式版;
终于不用在多行字符串中加一堆\n和一堆\"和一堆+了;
之前需要这么麻烦:
@Test
void test() {
String s = "testabcd\n"
+ "aaa\n"
+ "bbb\n";
System.out.println(s);
System.out.println("=".repeat(10));
}
现在只需一对"""就能搞定:
@Test
void test() {
String s = """
testabcd
aaa
bbb
""";
System.out.println(s);
System.out.println("=".repeat(10));
}
运行结果都是:

关于行首缩进,按照每行最小的缩进为准,包括结尾的"""行也进行计算:

运行结果:

还可以在换行符前使用“\”消除换行,或者在行尾使用\s添加空白字符并保留行结尾的空白字符:
@Test
void test() {
String s = """
testabcd
aaa\
bbb
""";
System.out.println(s);
System.out.println("=".repeat(10));
}

每行结尾的空白字符会被去掉:


使用\s后可保留(\s也算一个空白字符):


文本块里也可以使用%d%s等格式化,单引号双引号也不需要转义:
@Test
void test() {
String s = """
{"name":"%s", "age":%d}
""";
System.out.println(s.formatted("Tom", 13));
System.out.println("=".repeat(10));
}

随着jdk的迭代,String类也断断续续新增了一些好用的方法:
jdk11的repeat(int count)可以将字符串重复多遍,strip()去除收尾空白字符,stripLeading()去掉开头的空白字符,stripTrailing()去掉结尾的空白字符,isBlank()判断字符串长度是不是0,lines()将字符串按照换行转换成stream;
jdk12的indent(int n)可以添加缩进,transform(Function f)可以对字符串进行转化;
jdk15的formatted(Object... args)可以格式化字符串,stripIndent()去掉文本块行首位空白字符;
JDK15引入了字符串文本块功能,简化了多行字符串的编写,允许直接使用包围,自动处理缩进和换行。此外,新增formatted方法用于格式化字符串,stripIndent方法去除文本块的首尾空白。这些改进提高了代码的可读性和简洁性。
691

被折叠的 条评论
为什么被折叠?



