Guava 之 Joiner 和 Splitter
最近在給客戶準備一個Guava的分享,所以會陸續的更新關於Guava更多的細節分享。本文將記錄Guava中得字串處理Joiner(連線)和Splitter(分割)處理。
Joiner
首先我們來看看下面我們經常遇見的一個案例:
題目: 對於一個如下定義List List<String> list =of("1", "2", null, “3”); 按照’,’分割,並過濾掉null。
如果不用第三方庫,如common-lange,Guava,用原生java,我們將怎麼繼續?
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版本呢?
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的程式碼如下:
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的程式碼如下:
final Map<String, String> join = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green");
這裡同樣利用on傳入字串的第一分隔符,withKeyValueSeparator傳入項的分隔符,產生map的key/value項,其結果是一個{id=123, name=green}的Map物件。
相關文章
- guava之Joiner 和 SplitterGuava
- Guava中的Joiner和SplitterGuava
- Guava字串處理Joiner、SplitterGuava字串
- guava翻譯系列之JoinerGuava
- guava翻譯系列之SplitterGuava
- Guava原始碼淺析——JoinerGuava原始碼
- Guava文件翻譯之 Guava簡介Guava
- google guava集合之MultisetGoGuava
- Guava翻譯之SmallFunctionGuavaFunction
- Google guava原始碼之EventBusGoGuava原始碼
- Guava文件翻譯之 ServiceGuava
- Guava文件翻譯之ListenableFutureGuava
- 重試利器之Guava RetryingGuava
- 重試利器之Guava-RetryerGuava
- Java-TreeMap和Guava-HashMultisetJavaGuava
- [Guava] Google Guava 集合工具類GuavaGo
- GuavaGuava
- guava之ImmutableMap使用例項及好處Guava
- 限流原理解讀之guava中的RateLimiterGuavaMIT
- Guava 原始碼分析之 EventBus 原始碼分析Guava原始碼
- PDF Merge PDF Splitter for Mac(PDF合併和拆分軟體)Mac
- Java字串拼接寫法 joiner.onJava字串
- HTML元件庫(之一:splitter) (轉)HTML元件
- Guava CacheGuava
- Guava futureGuava
- Google guava工具類的介紹和使用GoGuava
- 使用Java和Google Guava簡化開發JavaGoGuava
- Win Form 的 Splitter 使用心得 (轉)ORM
- Google Guava 使用者指南 —- 初始Guava類庫GoGuava
- Guava RateLimiter限流GuavaMIT
- Guava Cache:核心引數深度剖析和原始碼分析Guava原始碼
- 《Google Guava—集合篇》GoGuava
- Guava庫介紹Guava
- 利用apache Collections和google guava對list和map進行過濾和排序ApacheGoGuava排序
- guava的wiki和Strings的所有方法介紹Guava
- SAP ABAP ALV 的一些總結:Custom container 和 Splitter containerAI
- Provide an Alternative View to Data Using Splitter Window (轉)IDEView
- Java原始碼分析:Guava之不可變集合ImmutableMap的原始碼分析Java原始碼Guava