Java11新增的String方法

来自

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

编译

猜你喜欢

转载自blog.csdn.net/weixin_34007291/article/details/91001536