舊瓶裝新酒的 Java 8 StringJoiner

2016-07-24    分類:JAVA開發、程式設計開發、首頁精華0人評論發表於2016-07-24

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

終於,Java 8在java.util軟體包下發布了StringJoiner類。我認為相對於我們使用StringBuffer / StringBuilder的舊式做法來連線字串,這並非是一個迥然不同的實現。我們一起來看一看StringJoiner的用法和它的內部實現。

例如,我有兩個字串為“Smart”和“Techie”,我想連線這些字串為[Smart,Techie]。在這種情況下,我的字首為“[”,字尾為“]”,以及分隔符為“,”。 StringJoiner有如下兩個建構函式。

StringJoiner(CharSequence delimiter)
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

我們想要有字首和字尾,因此在例子中使用第二個建構函式。

StringJoiner sjr = new StringJoiner(",", "[", "]");
sjr.add("Smart").add("Techie");
System.out.println("The final Joined string is " + sjr);

如果我們不希望有字首和字尾,那麼就:

sjr1.add("Smart").add("Techie");
System.out.println("The final Joined string is " + sjr1);

現在,我們將看到add和toString()方法的實現。

public StringJoiner add(CharSequence newElement) {
   prepareBuilder().append(newElement);
   return this;
}

prepareBuilder()實現如下。

private StringBuilder prepareBuilder() {
    if (value != null) {
       value.append(delimiter);
    } else {
       value = new StringBuilder().append(prefix);
    }
    return value;
}

從上面的實現中,可以很明顯看到StringJoiner遵循老式的做法。

toString()實現如下。

public String toString() {
    if (value == null) {
      return emptyValue;
    } else {
    if (suffix.equals("")) {
      return value.toString();
    } else {
    int initialLength = value.length();
    String result = value.append(suffix).toString();
    // reset value to pre-append initialLength
    value.setLength(initialLength);
    return result;
    }
}

學習快樂!

譯文連結:http://www.codeceo.com/article/java-8-stringjoiner.html
英文原文:Java 8 StringJoiner – Old Wine With a New Bottle
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章