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
10
11
12
13
14
15
public static String join(List stringList, String delimiter) {  StringBuilder builder = new StringBuilder();  for (Object item : stringList) {  if (item != null) {  builder  .append(item)  .append(delimiter);  }  }  builder.setLength(builder.length() delimiter.length());  return builder.toString(); } 

是不是很簡單,但是繁瑣,而且這里還有個坑,我們使用append的方式,在每次for完成后,我們必須去修正remove最后的分隔符:builder.setLength(builder.length() delimiter.length());

Guava版本呢?

1
2
3
4
5
6
 public static String joinByGuava(List stringList, String delimiter) {  return Joiner  .on(delimiter)  .skipNulls()  .join(stringList);  } 

我們不在考慮更多的細節,並且很有語義的告訴代碼的閱讀者,用什么分隔符,需要過濾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
 Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("id", "123", "name", "green")); 

這里采用了on傳入map item之間分隔符,以及withKeyValueSeparator傳遞map項key/value之間的分隔符。所以能夠很簡單的實現,不用我們在去實現一個的for循環代碼。

MapSplitter

題目:
對url中的查詢字符串"id=123&name=green"進行分割

利用Guava的MapSplitter的代碼如下:

1
final Map<String, String> join = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green"); 

這里同樣利用on傳入字符串的第一分隔符,withKeyValueSeparator傳入項的分隔符,產生map的key/value項,其結果是一個{id=123, name=green}的Map對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM