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