實戰小技巧4:優雅的實現字符串拼接

這是我參與8月更文挑戰的第12天,活動詳情查看:8月更文挑戰java

實戰小技巧4:優雅的實現字符串拼接git

天天一個實戰小技巧,字符串拼接github

相信沒有小夥伴沒有寫過這樣的代碼,好比說如今讓咱們來實現一個字符串拼接的場景,怎樣的實現纔算是優雅的呢?數組

以將int數組轉爲英文逗號分隔的字符串爲例進行演示微信

1. 普通寫法

直接使用StringBuilder來拼接markdown

public String join(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    for(Integer sub: list) {
        builder.append(sub).append(",");
    }
    return builder.substring(0, builder.length() - 1);
}
複製代碼

上面這種寫法相信比較常見,相對來講不太順眼的地方就是最後的toString,須要將最後的一個英文逗號給幹掉app

固然也能夠用下面這種事前判斷方式,避免最終的字符串截取oop

public String join2(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    boolean first = true;
    for (Integer sub: list) {
        if (first) {
            first = false;
        } else {
            builder.append(",");
        }
        builder.append(sub);
    }
    return builder.toString();
}
複製代碼

2. StringJoiner

上面實現中,幹掉最後的一個分隔符實在不是很優雅,那麼有更好一點的用法麼,接下來看一下使用StringJoiner的方式post

public String join3(List<Integer> list) {
    StringJoiner joiner = new StringJoiner(",");
    for (Integer s : list) {
        joiner.add(String.valueOf(s));
    }
    return joiner.toString();
}
複製代碼

StringJoiner由jdk1.8提供,除了上面的基礎玩法以外,結合jdk1.8帶來的流操做方式,能夠更簡潔的實現學習

return list.stream().map(String::valueOf).collect(Collectors.joining(","));
複製代碼

怎麼樣,上面這個實現比起前面的代碼是否是要簡潔多了,一行代碼完事

3. guava joiner

若是使用的jdk還不是1.8版本,不能使用上面的StringJoiner,不要緊,還有guava的Joiner也能夠實現

public String join5(List<Integer> list) {
    return Joiner.on(",").join(list);
}
複製代碼

注意

  • 接收的參數類型爲: 數組/Iterable/Iterator/可變參數, 基本上能夠覆蓋咱們平常的業務場景

4. 小結

本篇文章的主題是一個很是很是常見的字符串拼接,通常來說,咱們在作字符串拼接時,最麻煩的事情就是分隔符的處理,要麼就是分隔符前置添加,每次循環都須要判斷是否爲開頭;要麼就是後置,最後取字符串時,幹掉最後一個分隔符

本文提供了一個很是使用的方式StringJoiner,徹底解決了上面的分隔符問題,它的使用有兩種場景

  • 簡單的容器轉String:直接藉助Stream的Collectors.joining來實現
  • for循環 (這種場景通常是for循環內的邏輯不單單包括字符串拼接,還包括其餘的業務邏輯): 循環內直接執行stringJoiner.add()添加

對於jdk1.8及以上的版本,優先推薦使用上面說的StringJoiner來實現字符串拼接;至於jdk1.8之下,那麼Guava就是一個不錯的選擇了,使用姿式也很很簡單

系列博文

II. 其餘

1. 一灰灰Blogliuyueyi.github.io/hexblog

一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛

2. 聲明

盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

  • 微博地址: 小灰灰Blog
  • QQ: 一灰灰/3302797840
  • 微信公衆號:一灰灰blog
相關文章
相關標籤/搜索