区别
- 在split方法的入参上,查阅String split方法可知道入参其实是一个正则表达式
/* @param regex * the delimiting regular expression * * @return the array of strings computed by splitting this string * around matches of the given regular expression * * @throws PatternSyntaxException * if the regular expression's syntax is invalid * * @see java.util.regex.Pattern * * @since 1.4 * @spec JSR-51 */ public String[] split(String regex) { return split(regex, 0); }
- 而Guava Splitter的参数,从on方法定义可以看出,作为分隔符的入参可以是多种类型的,如下。
public static Splitter on(char separator); public static Splitter on(final CharMatcher separatorMatcher); public static Splitter on(final String separator); @GwtIncompatible("java.util.regex") public static Splitter on(final Pattern separatorPattern);
on方法的入参可以是单字符、字符串以及正则表达式,最大程度地保证了使用者不会因为没有检查入参含义而导致误用的问题,从易用性和友好程度角度出发,Guava的大多数方法确实更有优势
例子
java内置的会忽略空内容,guava Splitter不会忽略,也可以自由选择的忽略。 guava Splitter 可以通过splitToList方法直接将结果转成List。
@Test public void test_string_split() { String[] split = "a,b,,".split(","); // java内置的会忽略空内容 assertThat(split, equalTo(Lists.newArrayList("a", "b").toArray())); } @Test public void test_guava_Splitter() { List<String> splitToList = Splitter.on(",").splitToList("a,b,,");//guava不会忽略 assertThat(splitToList, equalTo(Lists.newArrayList("a", "b", "", ""))); } @Test public void test_guava_Splitter_omitEmptyStrings() { // 或者可以自由选择的忽略 ,像java一样,忽略空字符串 List<String> splitToList = Splitter.on(",").omitEmptyStrings().trimResults().splitToList("a,b,,"); assertThat(splitToList, equalTo(Lists.newArrayList("a", "b"))); }
总结
从易用性和友好程度角度出发,Guava的大多数方法确实更有优势