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的大多数方法确实更有优势

目录
相关文章
|
3天前
|
NoSQL Java Redis
如何在 Java 中操作这些 Redis 数据结构的基本方法
如何在 Java 中操作这些 Redis 数据结构的基本方法
9 2
|
3天前
|
安全 Java 开发者
【技术咖必看】Java异常处理新境界:throws关键字,打造万无一失的方法签名!
【6月更文挑战第19天】在Java异常处理中,`throws`关键字用于方法签名,声明可能抛出的异常,提示调用者必须处理。它区分运行时异常和检查型异常,常用于声明需要调用者捕获的检查型异常。例如,`readFile`方法`throws IOException`,强制调用者通过try-catch或同样`throws`。多异常声明允许一次声明多个可能的异常类型,增强代码健壮性。理解并善用`throws`能构建更稳定、可读的代码。
|
2天前
|
Java 程序员
java截取字符串的几种方法
java截取字符串的几种方法
|
2天前
|
安全 Java
JAVA反射调用方法
JAVA反射调用方法
|
3天前
|
Java 开发者
线程的诞生之路:Java多线程创建方法的抉择与智慧
【6月更文挑战第19天】Java多线程编程中,开发者可选择继承Thread类或实现Runnable接口。继承Thread直接但受限于单继承,适合简单场景;实现Runnable更灵活,支持代码复用,适用于如银行转账这类需多线程处理的复杂任务。在资源管理和任务执行控制上,Runnable接口通常更优。
|
2天前
|
安全 Java
JAVA多线程通信新解:wait()、notify()、notifyAll()的实用技巧
【6月更文挑战第20天】Java多线程中,`wait()`, `notify()`和`notifyAll()`用于线程通信。在生产者-消费者模型示例中,它们确保线程同步。`synchronized`保证安全,`wait()`在循环内防止虚假唤醒,`notifyAll()`避免唤醒单一线程问题。关键技巧包括:循环内调用`wait()`,优先使用`notifyAll()`以保证可靠性,以及确保线程安全和正确处理`InterruptedException`。
|
2天前
|
安全 Java
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
【6月更文挑战第20天】JAVA多线程中,wait(), notify(), notifyAll()是Object类的关键同步机制。wait()让线程等待并释放锁,直到被notify()或notifyAll()唤醒或超时。它们必须在同步块中使用,持有锁的线程调用。notify()唤醒一个等待线程,notifyAll()唤醒所有。最佳实践包括:与synchronized结合,循环检查条件,避免循环内notify(),通常优先使用notifyAll()。
|
2天前
|
Java 程序员
从菜鸟到大神:JAVA多线程通信的wait()、notify()、notifyAll()之旅
【6月更文挑战第21天】Java多线程核心在于wait(), notify(), notifyAll(),它们用于线程间通信与同步,确保数据一致性。wait()让线程释放锁并等待,notify()唤醒一个等待线程,notifyAll()唤醒所有线程。这些方法在解决生产者-消费者问题等场景中扮演关键角色,是程序员从新手到专家进阶的必经之路。通过学习和实践,每个程序员都能在多线程编程的挑战中成长。
|
1天前
|
安全 Java 程序员
Java多线程详解
Java多线程详解
|
1天前
|
缓存 安全 Java
Java线程面试题含答案
Java线程面试题含答案