Google Guava學習筆記——基礎工具類Joiner的使用


  Guava 中有一些基礎的工具類,如下所列:

  1,Joiner 類:根據給定的分隔符把字符串連接到一起。MapJoiner 執行相同的操作,但是針對 Map 的 key 和 value。

  2,Splitter 類:與 Joiner 操作相反的類,是根據給定的分隔符,把一個字符串分隔成若個子字符串。

  3,CharMatcher,Strings 類:對字符串通用的操作,例如移除字符串的某一部分,字符串匹配等等操作。

  4,其他類:針對Object操作的方法,例如 toString 和 hashCode 方法等。

 

  使用 Joiner 類

  我們通常根據指定的分隔符來連接字符串是這樣做的。

 1 public String buildString(List<String> stringList, String delimiter){
 2         StringBuilder builder = new StringBuilder();
 3         for (String s : stringList) {
 4              if(s != null){
 5                   builder.append(s).append(delimiter);
 6             }
 7         }
 8         builder.setLength(builder.length() – delimiter.length());
 9         return builder.toString();
10 }

  上面的代碼注意的一點就是我們要移除字符串最后的一個分隔符。雖然不難,但是很無聊,下面用 Joiner 類來實現同樣的功能:

    

Joiner.on("|").skipNulls().join(stringList); // 默認使用“|”作為分隔符

  是不是很簡潔,如果你想替換為 null 的字符串,使用下面的方法:

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

  需要注意的是,Joiner 不僅可以操作字符串,還可以是數組,迭代器,可變參數。Joiner 類是不可變類,因此是線程安全的,它可以處理 static final 的變量,考慮到這一點,我們看下面的代碼:

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

  在上面的代碼中,useForNull()方法沒有起作用,null值還是被忽略了。

  Joiner 不僅可以返回string ,還有方法能夠處理StringBuilder類:

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");

  只要是實現了 Appendble 接口的類都可以用 Joiner 來處理。

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

  上面的例子中,我們傳遞了 FileWriter 實例 和 Data 對象給 Joiner,Joiner 將連接list中所有的數據給 FileWriter 實例並返回。

  如上所示,Joiner 是一個非常有用的類,很容易處理日常的一些任務。還有一個特殊的方法,它和 Joiner 的工作方式是一樣,但是它連接的是根據指定的分隔符連接 Map 的 key 和 value。

mapJoiner = Joiner.on("#").withKeyValueSeparator("=");

  下面的單元測試類展示了如何連接 Map 的 key-value。

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);

    System.out.println(returnedString);

  運行結果:Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys

 

 

 

 

    


 

 


免責聲明!

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



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