轉 guava 字符串連接和字符串分割

轉自https://www.iteye.com/blog/jackyrong-2157324

guava庫中,包含了很好的join和split的功能,例子如下: 

1) 將LIST轉換爲使用字符串連接的字符串 
  

Java代碼 

 收藏代碼

  1. List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom");  
  2. String result = Joiner.on(",").join(names);  
  3.   
  4. assertEquals(result, "John,Jane,Adam,Tom");  



2)使用joiner把MAP轉成STRING 

 

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenConvertMapToString_thenConverted() {  
  3.     Map<String, Integer> salary = Maps.newHashMap();  
  4.     salary.put("John", 1000);  
  5.     salary.put("Jane", 1500);  
  6.     String result = Joiner.on(" , ").withKeyValueSeparator(" = ")  
  7.                                     .join(salary);  
  8.    
  9.     assertThat(result, containsString("John = 1000"));  
  10.     assertThat(result, containsString("Jane = 1500"));  
  11. }  
  12.    



3 將嵌套的collection join起來 
  

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenJoinNestedCollections_thenJoined() {  
  3.     List<ArrayList<String>> nested = Lists.newArrayList(  
  4.       Lists.newArrayList("apple", "banana", "orange"),  
  5.       Lists.newArrayList("cat", "dog", "bird"),  
  6.       Lists.newArrayList("John", "Jane", "Adam"));  
  7.     String result = Joiner.on(";").join(Iterables.transform(nested,  
  8.       new Function<List<String>, String>() {  
  9.           @Override  
  10.           public String apply(List<String> input) {  
  11.               return Joiner.on("-").join(input);  
  12.           }  
  13.       }));  
  14.    
  15.     assertThat(result, containsString("apple-banana-orange"));  
  16.     assertThat(result, containsString("cat-dog-bird"));  
  17.     assertThat(result, containsString("apple-banana-orange"));  
  18. }  



4 當使用joiner時候處理null值 
   有幾個對付NULL值的方法,第一個是skipNulls(). 
 

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenConvertListToStringAndSkipNull_thenConverted() {  
  3.     List<String> names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom");  
  4.     String result = Joiner.on(",").skipNulls().join(names);  
  5.    
  6.     assertEquals(result, "John,Jane,Adam,Tom");  
  7. }  



   或者乾脆將null值換掉,就是: 
 

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenUseForNull_thenUsed() {  
  3.     List<String> names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom");  
  4.     String result = Joiner.on(",").useForNull("nameless").join(names);  
  5.    
  6.     assertEquals(result, "John,nameless,Jane,Adam,Tom");  
  7. }  



5 使用splitter方法把string轉換爲list 
   

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenCreateListFromString_thenCreated() {  
  3.     String input = "apple - banana - orange";  
  4.     List<String> result = Splitter.on("-").trimResults()  
  5.                                           .splitToList(input);  
  6.    
  7.     assertThat(result, contains("apple", "banana", "orange"));  
  8. }  



6 使用splitter將string轉爲map 
  

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenCreateMapFromString_thenCreated() {  
  3.     String input = "John=first,Adam=second";  
  4.     Map<String, String> result = Splitter.on(",")  
  5.                                          .withKeyValueSeparator("=")  
  6.                                          .split(input);  
  7.    
  8.     assertEquals("first", result.get("John"));  
  9.     assertEquals("second", result.get("Adam"));  
  10. }  



7 guava還支持使用多個分隔符來分割字符,比如 
  

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenSplitStringOnMultipleSeparator_thenSplit() {  
  3.     String input = "apple.banana,,orange,,.";  
  4.     List<String> result = Splitter.onPattern("[.|,]")  
  5.                                   .omitEmptyStrings()  
  6.                                   .splitToList(input);  
  7.    
  8.     assertThat(result, contains("apple", "banana", "orange"));  
  9. }  



8 每隔多少個字符進行分隔 
  

Java代碼 

 收藏代碼

  1. @Test  
  2. public void whenSplitStringOnSpecificLength_thenSplit() {  
  3.     String input = "Hello world";  
  4.     List<String> result = Splitter.fixedLength(3).splitToList(input);  
  5.    
  6.     assertThat(result, contains("Hel", "lo ", "wor", "ld"));  
  7. }  



9 還可以讓splitter在分割多少個字符後停止分隔,比如 
  

Java代碼 

 收藏代碼

  1.    
  2. @Test  
  3. public void whenLimitSplitting_thenLimited() {  
  4.     String input = "a,b,c,d,e";  
  5.     List<String> result = Splitter.on(",")  
  6.                                   .limit(4)  
  7.                                   .splitToList(input);  
  8.    
  9.     assertEquals(4, result.size());  
  10.     assertThat(result, contains("a", "b", "c", "d,e"));  
  11. }  
  12.    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章