這是我參與8月更文挑戰的第12天,活動詳情查看:8月更文挑戰java
實戰小技巧4:優雅的實現字符串拼接git
天天一個實戰小技巧,字符串拼接
github
相信沒有小夥伴沒有寫過這樣的代碼,好比說如今讓咱們來實現一個字符串拼接的場景,怎樣的實現纔算是優雅的呢?數組
以將int數組轉爲英文逗號分隔的字符串爲例進行演示微信
直接使用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();
}
複製代碼
上面實現中,幹掉最後的一個分隔符實在不是很優雅,那麼有更好一點的用法麼,接下來看一下使用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(","));
複製代碼
怎麼樣,上面這個實現比起前面的代碼是否是要簡潔多了,一行代碼完事
若是使用的jdk還不是1.8版本,不能使用上面的StringJoiner,不要緊,還有guava的Joiner也能夠實現
public String join5(List<Integer> list) {
return Joiner.on(",").join(list);
}
複製代碼
注意
本篇文章的主題是一個很是很是常見的字符串拼接,通常來說,咱們在作字符串拼接時,最麻煩的事情就是分隔符的處理,要麼就是分隔符前置添加,每次循環都須要判斷是否爲開頭;要麼就是後置,最後取字符串時,幹掉最後一個分隔符
本文提供了一個很是使用的方式StringJoiner
,徹底解決了上面的分隔符問題,它的使用有兩種場景
Collectors.joining
來實現stringJoiner.add()
添加對於jdk1.8及以上的版本,優先推薦使用上面說的StringJoiner來實現字符串拼接;至於jdk1.8之下,那麼Guava就是一個不錯的選擇了,使用姿式也很很簡單
系列博文
一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛
盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激