Contents

Java 11字符串API

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(),因为它提供了更好的中断多行输入的性能。