guava之Joiner 和 Splitter
最近在給客戶準備一個Guava的分享,所以會陸續的更新關於Guava更多的細節分享。本文將記錄Guava中得字串處理Joiner(連線)和Splitter(分割)處理。
Joiner
首先我們來看看下面我們經常遇見的一個案例:
題目:
對於一個如下定義List
List<String> list = new ArrayList<String>("1", "2", null, “3”);
按照’,’分割,並過濾掉null。
如果不用第三方庫,如common-lange,Guava,用原生java,我們將怎麼繼續?
1 2 3 4 5 6 7 8 9 |
|
是不是很簡單,但是繁瑣,而且這裡還有個坑,我們使用append的方式,在每次for完成後,我們必須去修正remove最後的分隔符:builder.setLength(builder.length() delimiter.length());
Guava版本呢?
1 2 3 4 5 6 |
|
我們不在考慮更多的細節,並且很有語義的告訴程式碼的閱讀者,用什麼分隔符,需要過濾null值再join。
note:當然我們也可以用common-lange來很簡單的完成:StringUtils.join(stringList, delimiter).但是個人推薦儘量使用Guava替代common-lange,因為Guava還有更多的有用方法,後續會陸續介紹,還有就是Guava的API相對更有語意一點。
Splitter
MapJoinner和MapSplitter
對於MapJoinner和MapSplitter的最好案例就是url的param編碼。
MapJoinner
題目:
生產一個查詢id: 123,name: green的學生資訊的url。
利用Guava的MapJoinner的程式碼如下:
1
|
|
這裡採用了on傳入map item之間分隔符,以及withKeyValueSeparator傳遞map項key/value之間的分隔符。所以能夠很簡單的實現,不用我們在去實現一個的for迴圈程式碼。
MapSplitter
題目:
對url中的查詢字串"id=123&name=green"進行分割
利用Guava的MapSplitter的程式碼如下:
1
|
|
這裡同樣利用on傳入字串的第一分隔符,withKeyValueSeparator傳入項的分隔符,產生map的key/value項,其結果是一個{id=123, name=green}的Map物件。