guava Splitter 与java 内置的string的split 方法的区别

简介: guava Splitter 与java 内置的string的split 方法的区别

区别

  • 在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() {
    // 或者可以自由选择的忽略&emsp;,像java一样,忽略空字符串
    List<String> splitToList = Splitter.on(",").omitEmptyStrings().trimResults().splitToList("a,b,,");

    assertThat(splitToList, equalTo(Lists.newArrayList("a", "b")));
}

总结

从易用性和友好程度角度出发,Guava的大多数方法确实更有优势

目录
相关文章
|
12天前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
14 0
|
13天前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
12天前
|
存储 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
16 0
|
2天前
|
开发框架 安全 Java
.net和java有什么样的区别?
Java和.NET在本质、编程语言、生态系统与工具、跨平台性、应用领域、性能与效率以及安全性与可靠性等方面都存在明显的区别。选择哪个平台取决于具体的需求、技术栈和目标平台。
20 7
|
12天前
|
存储 Java 程序员
Java面试题:请解释Java中的永久代(PermGen)和元空间(Metaspace)的区别
Java面试题:请解释Java中的永久代(PermGen)和元空间(Metaspace)的区别
40 11
|
12天前
|
存储 安全 Java
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
20 3
|
20天前
|
存储 Java
Java堆与栈的区别及应用
Java堆与栈的区别及应用
|
20天前
|
安全 Java
Java基础之StringBuffer
【7月更文挑战第1天】 Java中的`StringBuffer`是线程安全的字符串操作类,适合多线程环境,而`StringBuilder`非线程安全,速度更快,适用于单线程。两者提供`append()`、`insert()`、`delete()`等方法修改字符串,避免了频繁创建新对象的性能问题。在不需要线程安全时,推荐使用`StringBuilder`以提高效率。
14 1
|
21天前
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
|
10天前
|
存储 算法 Java
JAVA内存模型与JVM内存模型的区别
JAVA内存模型与JVM内存模型的区别