ITPub博客

首页 > IT职业 > IT职场 > Google Guava之字符串连接与分割

Google Guava之字符串连接与分割

IT职场 作者:wyvernw 时间:2021-09-09 08:59:49 0 删除 编辑
字符串连接 -- Joiner

Joiner.on(separator).join(parts)

返回值为String。执行join()之前,必须使用on()设置分隔符。
parts支持Iterable、Iterato、Object[]以及不常用的String型不定参。

代码清单1——数组

String[] numberArray = new String[] { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
                "Ten" };
String numbers = Joiner.on(";").join(numberArray);
System.out.println(numbers);
//输出:One;Two;Three;Four;Five;Six;Seven;Eight;Nine;Ten

代码清单2——Iterable

Iterable numberIter = Splitter.on(",").split("One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten");
String numbers = Joiner.on(";").join(numberIter);
System.out.println(numbers);

//输出:One;Two;Three;Four;Five;Six;Seven;Eight;Nine;Ten

代码清单3——String不定参

String numbers = Joiner.on(";").join("One", "Two", "Three", "Four");
System.out.println(numbers);
//输出:One;Two;Three;Four

代码清单4——Iterator

String[] numberArray = new String[] { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
                "Ten" };
Iterator iterators = Arrays.asList(numberArray).iterator();
String numbers = Joiner.on(";").join(iterators);
System.out.println(numbers);
//输出 One;Two;Three;Four;Five;Six;Seven;Eight;Nine;Ten

Joiner.on(separator).skipNulls().join(parts)

使用skipNulls(),可以忽略null值。避免parts中有null值时,抛出NPE异常。

代码清单5

String numbers = Joiner.on(";").join("One","Two","Three",null,"Five");
System.out.println(numbers);
// 抛出异常 java.lang.NullPointerException

代码清单6

String numbers = Joiner.on(";").skipNulls().join("One","Two","Three",null,"Five");
System.out.println(numbers);
//输出:One;Two;Three;Five

Joiner.on(separator).useForNull(nullText).join(parts)

使用useForNull(),可以将part中的null值替换为指定字符。

代码清单7

String numbers = Joiner.on(";").useForNull("NULL").join("One", "Two", "Three", null, "Five");
System.out.println(numbers);
//输出:One;Two;Three;NULL;Five

字符串分割 -- Splitter

Splitter.on(separator).split(sequence)

返回值为Iterable。执行split()前,必须使用on()设置分隔符。
从代码清单8的输出结果可以看出,分割结果并未过滤掉空字符串。

代码清单8

String numberList = "One,Two,Three,Four,Five,,Six,Seven,Eight,Nine,Ten,";
Iterable split = Splitter.on(",").split(numberList);
for (String str : split) {
    System.out.print(str + ";");
}

//输出:One;Two;Three;Four;Five;;Six;Seven;Eight;Nine;Ten;;

Splitter.on(separator).omitEmptyStrings().split(sequence)

通过使用omitEmptyStrings(),设置Splitter过滤掉length=0的空字符串

代码清单9

String numberList = "One,Two,Three,Four,Five,,Six,Seven,Eight,Nine,Ten,";

Iterable split = Splitter.on(",").omitEmptyStrings().split(numberList);
for (String str : split) {
    System.out.print(str + ";");
}

//输出One;Two;Three;Four;Five;Six;Seven;Eight;Nine;Ten;

字符串分割效率测试

常用字符串分割方法或工具类有:

  • JDK : String自带方法
  • commons-lang3 : StringUtils工具类
  • Google Guave : Splitter工具类

测试代码

/**
     * 使用JDK自带方法
     */
    public void splitByJdk() {
        String numberList = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten";
        long start = System.currentTimeMillis();
        for (int i = 0; i 

测试结果

图片描述

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/835/viewspace-2798408/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    128
  • 访问量
    1296