1 介绍
Java 11在String增加了一些有用的API。
2 repeat()
repeat()重复字符串内容。
返回一个字符串,其内容是字符串重复n次后的结果。
@Test
public void whenRepeatStringTwice_thenGetStringTwice() {
String output = "La ".repeat(2) + "Land";
is(output).equals("La La Land");
}
如果对空字符串或长度为0的字符串做操作,会返回空字符串。
3 strip()
strip()将字符串头和尾的空格去除后的字符串。
@Test
public void whenStripString_thenReturnStringWithoutWhitespaces() {
is("\n\t hello \u2005".strip()).equals("hello");
}
还提供了stripLeading()和stripTrailing(),可以分别去掉头部或尾部的空格。
3.1 strip()和trim()的区别
strip系列方法判断是否空格基于Character.isWhiteSpace()。换句话说,它关注的是Unicodewhitespace字符。
trim方法判断的标准是小于等于Unicode空格字符(U+0020)。如果对上面的示例采用trim():
@Test
public void whenTrimAdvanceString_thenReturnStringWithWhitespaces() {
is("\n\t hello \u2005".trim()).equals("hello \u2005");
}
可以看到,trim()可以去掉头部空白,但不能处理尾部空白。因为trim()方法不能识别Unicode的空白字符,不认为'\u2005'是一个空白字符。
4 isBlank()
如果字符串为空或只包含空格,则返回true。否则返回false。
@Test
public void whenBlankString_thenReturnTrue() {
assertTrue("\n\t\u2005 ".isBlank());
}
isBlank也会识别Unicode空白字符。
5 lines()
从字符串返回按行分割的Stream。
@Test
public void whenMultilineString_thenReturnNonEmptyLineCount() {
String multilineStr = "This is\n \n a multiline\n string.";
long lineCount = multilineStr.lines()
.filter(String::isBlank)
.count();
is(lineCount).equals(3L);
}
行分割福包括:\n \r \r\n。
stream包含了按顺序分割的行,行分隔符被移除了。
这个方法会类似split(),但性能更好。
6 结论
本文探索了java 11的String API。示例代码在github