文本块在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()去掉文本块行首位空白字符;