Getting Started With Google Guava--Basic Guava Utilities

使用Joiner

典型的使用原生的java處理拼接字符串的方法:

    public String buildString(List<String> stringList, String delimiter){
         StringBuilder builder = new StringBuilder();
         for (String s : stringList) {
             if(s !=null){
                 builder.append(s).append(delimiter);
             }
        }
        builder.setLength(builder.length() – delimiter.length());
        return builder.toString();
   }

注意:這里需要移除最后一個(gè)分隔符。
原生的java實(shí)現(xiàn)其實(shí)也不是很復(fù)雜,但是使用Google Guava類庫(kù)中的Joiner來實(shí)現(xiàn)的話更加簡(jiǎn)潔:

    Joiner.on("|").skipNulls().join(stringList);

上面的skipNulls方法是忽略了stringList中為null的空值。當(dāng)然,Joiner中也可以指定空值得替代,比如如下的代碼:

     Joiner.on("|").useForNull("no value").join(stringList);

有幾點(diǎn)需要說明:Joiner類不僅能處理String類型的數(shù)據(jù),還能處理數(shù)組,迭代對(duì)象以及任何對(duì)象的可變參數(shù)類。其實(shí)也是調(diào)用了Object的toString()方法。另外如果空值存在集合中,并且skipNulls活著useForNull都沒有指定的話,NullPointerException異常將會(huì)拋出。還有,一旦Joiner對(duì)象創(chuàng)建,將會(huì)是不變的。比如如下的useForNull將不會(huì)起任何作用:

     Joiner stringJoiner = Joiner.on("|").skipNulls();
     //the useForNull() method returns a new instance of the Joiner!
     stringJoiner.useForNull("missing");
     stringJoiner.join("foo","bar",null);

Joiner類不僅可以返回String對(duì)象,還可以返回StringBuilder對(duì)象:

      StringBuilder stringBuilder = new StringBuilder();
      Joiner joiner = Joiner.on("|").skipNulls();
     //returns the StringBuilder instance with the values foo,bar,baz appeneded with "|" delimiters
     joiner.appendTo(stringBuilder,"foo","bar","baz")

Joiner類可以作用于實(shí)現(xiàn)了Appendable的所有類:

     FileWriter fileWriter = new FileWriter(new File("path")):
     List<Date> dateList = getDates();
     Joiner joiner = Joiner.on("#").useForNulls(" ");
     //returns the FileWriter instance with the valuesappended into it
     joiner.appendTo(fileWriter,dateList);

Joiner類也可以作用于Map對(duì)象:

    public void testMapJoiner() {
         //Using LinkedHashMap so that the original order is preserved
         String expectedString = "Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
         Map<String,String> testMap = Maps.newLinkedHashMap();
         testMap.put("Washington D.C","Redskins");
         testMap.put("New York City","Giants");
         testMap.put("Philadelphia","Eagles");
         testMap.put("Dallas","Cowboys");
         String returnedString = Joiner.on("#").withKeyValueSeparator("=").join(testMap);
         assertThat(returnedString,is(expectedString));
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容