Java 11字符串API
Contents
1. 简介
Java 11 为常用的String类 添加了一些有用的 API 。在本教程中,我们将探索和使用这些新的 API。
2. repeat()
顾名思义,repeat() 实例方法重复字符串内容。 它返回一个字符串,其值为重复n次的字符串的串联,其中n作为参数传递:
@Test
public void whenRepeatStringTwice_thenGetStringTwice() {
String output = "La ".repeat(2) + "Land";
is(output).equals("La La Land");
}
此外,如果字符串为空或计数为零, *repeat()*将返回一个空字符串。
3. strip()
**strip()实例方法返回一个删除所有前导和尾随空格的字符串:
@Test
public void whenStripString_thenReturnStringWithoutWhitespaces() {
is("\n\t hello \u2005".strip()).equals("hello");
}
Java 11 还添加了方法stripLeading()和stripTrailing(),它们分别处理前导和尾随空格。
3.1.*strip()和trim()*之间的区别
strip()根据**Character.isWhitespace()确定字符是否为空格。换句话说,它知道 Unicode 空白字符。 这与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()
**如果字符串为空或仅包含空格,则isBlank ()实例方法返回true 。否则,它返回 false:
@Test
public void whenBlankString_thenReturnTrue() {
assertTrue("\n\t\u2005 ".isBlank());
}
同样,isBlank() 方法可以识别 Unicode 空白字符,就像*strip()*一样。
5. lines()
**lines()实例方法返回从字符串中提取的行流 ,由行终止符分隔:
@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”。 流包含按照它们出现的顺序的行。从每一行中删除行终止符。 这种方法应该优于split(),因为它提供了更好的中断多行输入的性能。