java實戰小技巧之優雅的實現字符串拼接
前言
字符串拼接不管是在業務上,還是寫算法時都會頻繁使用到。
相信沒有小夥伴沒有寫過這樣的代碼,比如說現在讓我們來實現一個字符串拼接的場景,怎樣的實現才算是優雅的呢?
以將int數組轉為英文逗號分隔的字符串為例進行演示
String底層原理
在討論字符串拼接時,首先需要知道String的底層原理。
看下結構
private final byte[] value;
這一行代碼已經可以說明很多東西。字符串實質就是不可變的byte數組。因為不可變,所以對他進行拼接對他拼接實際就是生成瞭多個對象,這就是不鼓勵對字符串進行拼接的原因。但不可變也有很多好處,例如線程安全、可以存在字符串緩沖池復用字符串等。
1. 普通寫法
直接使用StringBuilder來拼接
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,需要將最後的一個英文逗號給幹掉
當然也可以用下面這種事前判斷方式,避免最終的字符串截取
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的方式
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來實現
總結
到此這篇關於java實戰小技巧之優雅實現字符串拼接的文章就介紹到這瞭,更多相關java字符串拼接內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java8優雅的字符串拼接工具類StringJoiner實例代碼
- Java字符串拼接的優雅方式實例詳解
- java 將 list 字符串用逗號隔開拼接字符串的多種方法
- Java效率提升神器之Guava-Joiner
- Java8 將List轉換為用逗號隔開的字符串的多種方法