首發csdn,osc延後更新
java
在字符串處理操做中,很是經常使用的一個功能是將一個字符串數組或者字符串集合使用某種分隔符拼接爲單一的字符串(須要注意拼接操做每每是不可逆的)。除了醜陋的本身寫以外,經常使用的方式還有下面幾種:apache
1. Java8的String.join數組
2. Guava的Joineride
3. Apache commons-lang3的StringUtilsgoogle
這3者都能實現最基本的功能,可是在細節上仍是有不少不一樣,使用時值得注意選擇。簡要提及來主要區別以下:spa
1. Java8的String.join實現最簡單,可是它會將null輸出爲"null"code
2. Guava的Joiner提供的連貫接口,若是不指定如何處理null則遇到null時會拋出NPE,能夠指定跳過null,也能夠指定將null轉換爲什麼種字符串orm
3. Apache commons-lang3的StringUtils提供的方法直接將null轉換爲空字符串,對於數組輸入能夠指定只拼接其中一部分blog
下面是代碼和對應的輸出接口
package blog.java; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.google.common.base.Joiner; public class S14 { @DataProvider public Object[][] list() { String[] array = { "a", "b", null, "c", "", "d" }; List<String> list = Arrays.asList(array); return new Object[][] { new Object[] { array, list } }; } @Test(dataProvider = "list") public void testJava8Join(String[] array, List<String> list) { // "a, b, null, c, , d" System.out.println(String.join(", ", array)); // "a, b, null, c, , d" System.out.println(String.join(", ", list)); } @Test(dataProvider = "list") public void testLang3StringUtils(String[] array, List<String> list) { // "a, b, , c, , d" System.out.println(StringUtils.join(array, ", ")); // "a, b, , c, , d" System.out.println(StringUtils.join(list, ", ")); // "a, b, , c" System.out.println(StringUtils.join(array, ", ", 0, 4)); } @Test(dataProvider = "list") public void testGuavaJoiner(String[] array, List<String> list) { // java.lang.NullPointerException System.out.println(Joiner.on(", ").join(array)); // java.lang.NullPointerException System.out.println(Joiner.on(", ").join(list)); // "a, b, c, , d" System.out.println(Joiner.on(", ").skipNulls().join(array)); // "a, b, c, , d" System.out.println(Joiner.on(", ").skipNulls().join(list)); // "a, b, nullString, c, , d" System.out.println(Joiner.on(", ").useForNull("nullString").join(array)); // "a, b, nullString, c, , d" System.out.println(Joiner.on(", ").useForNull("nullString").join(list)); } }