Java 11字串API有更新

banq發表於2018-09-20
原文網址 : http://jdon.com/50116
即將釋出的新LTS JDK 11版本帶來一些有趣的String API更新。

repeat()方法
String API的最酷新增之一是repeat()方法......它允許將String以一定次數與自身連線:

var string =“foo bar”;
var result = string.repeat(2); // foo bar foo bar

如果你嘗試重複一次0次字串,你將總是得到一個空字串:

@Test
void shouldRepeatZeroTimes() {
    var string = "foo";

    var result = string.repeat(0);

    assertThat(result).isEqualTo("");
}
<p class="indent">


同樣適用於可重複空的字串:

@Test
void shouldRepeatEmpty() {
    var string = "";

    var result = string.repeat(Integer.MAX_VALUE);

    assertThat(result).isEqualTo("");
}
<p class="indent">


可能很容易認為它只是依賴於底層的StringBuilder,但實際情況並非如此。實際這種實現更具資源效率。


isBlank()
這是非常簡單的 - 現在我們可以檢查String例項是空的還是包含空格(由Character#isWhitespace(int)定義 ):
var result = " ".isBlank(); // true

strip()
我們現在可以輕鬆地從每個String中刪除所有前導和尾隨空格:

assertThat("  f oo  ".strip()).isEqualTo("f oo");("  f oo  ".strip()).isEqualTo("f oo");
<p class="indent">


另外,我們可以將操作範圍縮小到尾隨/前導空格:

assertThat("  f oo  ".stripLeading()).isEqualTo("f oo  ");("  f oo  ".stripLeading()).isEqualTo("f oo  ");

assertThat("  f oo  ".stripTrailing()).isEqualTo("  f oo");("  f oo  ".stripTrailing()).isEqualTo("  f oo");
<p class="indent">


但是,可能會問自己這個與String#trim有何不同?

實際上,String#strip是一種現代的Unicode 識別替代方案,它依賴於與 String#isBlank 相同的對空白的定義。

lines方法
使用這種新方法,我們可以輕鬆地將String例項拆分為單獨行的Stream <String>:

"foo\nbar".lines().forEach(System.out::println);.lines().forEach(System.out::println);

// foo// foo
// bar// bar
<p class="indent">

真正酷的是,不是拆分String並將其轉換為Stream,而是實現了專門的Spliterators(一個用於拉丁語,另外一個用於UTF-16字串),這使得可以保持惰性。

Java 11字串API更新 - {4Comprehension}

相關文章