Joiner的用法


Google Guava提供了Joiner類專門用來連接String。

譬如說有個String數組,里面有"a","b","c",我們可以通過使用StringBuilder來創建String "a,b,c"。

Joiner提供了這一類的功能。

譬如:

[java]  view plain  copy
 
  1. Joiner joiner = Joiner.on(";");  
  2. assertEquals("a;b;c", joiner.join(new String[}{"a","b","c"}));  

 

 

當然Joiner.join還提供了參數為Iterable的overload形式。也就是說你可以傳各種List和Set。

如果被連接String里面要過濾null,可以這樣:

 

[java]  view plain  copy
 
  1. Joiner joiner = Joiner.on(";").skipNulls();  
  2. assertEquals("a;c", joiner.join(new String[]{"a",null,"c"}));  

 

或者對null進行替換操作:

 

[java]  view plain  copy
 
  1. Joiner joiner = Joiner.on(";").useForNull("!");  
  2. assertEquals("a;!;c", joiner.join(new String[]{"a",null,"c"}));  

 

Joiner還提供了appendTo函數,對傳入的StringBuilder作處理:

 

[java]  view plain  copy
 
  1. Joiner joiner = Joiner.on(";");  
  2. StringBuilder ab = new StringBuilder("start: ");  
  3. assertEquals("start: a;b;c", joiner.appendTo(ab, new String[]{"a","b","c"}).toString());  

 

除此之外,相關的MapJoiner類也利用Joiner提供了Map的join功能:

[java]  view plain  copy
 
  1. Map<Integer, String> map = new HashMap<Integer, String>();  
  2. map.put(1, "a");  
  3. map.put(2, "b");  
  4. MapJoiner joiner = Joiner.on(";").withKeyValueSeparator("->");  
  5. assertEquals("1->a;2->b", joiner.join(map));  

 

 

 

需要注意的是Joiner類是immutable的。換言之,它是線程安全的,你可以把它static final來用沒問題。但是這樣的話,正如javadoc所舉的例子:

[java] view plain copy
 
  1. // Bad! Do not do this!  
  2. Joiner joiner = Joiner.on(',');  
  3. joiner.skipNulls(); // does nothing!  
  4. return joiner.join("wrong", null, "wrong");  

 

 

第1行的Joiner對象就是第3行的對象,第2行的skipNulls()其實是返回一個Joiner的一個匿名子類,而對之前的joiner對象沒有影響,所以第3行的Joiner對象根本沒有skip null的功能。

 


免責聲明!

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



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