亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Google Guava之字符串連接與分割

標簽:
Java
字符串连接 -- Joiner

Joiner.on(separator).join(parts)

返回值为String。执行join()之前,必须使用on()设置分隔符。
parts支持IterableIteratoObject[]以及不常用的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<String> 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<String> 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<String> 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<String> 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 < 2000000; i++) {
            numberList.split(",");
        }
        long end = System.currentTimeMillis();
        System.out.println("JDK耗时:" + (end - start));
    }
    /**
     * 使用commons-lang3
     */
    public void splitByCommons() {
        String numberList = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten";
        long start = System.currentTimeMillis();
        for (int i = 0; i < 2000000; i++) {
            StringUtils.split(numberList, ",");
        }
        long end = System.currentTimeMillis();
        System.out.println("commons耗时:" + (end - start));
    }
    /**
     * 使用Google Guava
     */
    public void splitByGuava() {
        String numberList = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten";
        long start = System.currentTimeMillis();
        for (int i = 0; i < 2000000; i++) {
            Splitter.on(",").omitEmptyStrings().split(numberList);
        }
        long end = System.currentTimeMillis();
        System.out.println("guava耗时:" + (end - start));
    }
    /**
     * 使用Google Guava
     * 循环外初始化Splitter对象,减少声明
     */
    public void splitByGuava2() {
        String numberList = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten";
        long start = System.currentTimeMillis();
        Splitter on = Splitter.on(",").omitEmptyStrings();
        for (int i = 0; i < 2000000; i++) {
            on.split(numberList);
        }
        long end = System.currentTimeMillis();
        System.out.println("guava2耗时:" + (end - start));
    }

测试结果

图片描述

點擊查看更多內容
3人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
26
獲贊與收藏
15

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消