zoukankan      html  css  js  c++  java
  • Google的Guava工具类splitter和apache stringutil对比 编辑

    一直用的是apache的stringutil工具类,其实google的工具类项目 guava中居然也有字符串的分隔类splitter的,在 http://code.google.com/p/guava-libraries/中可以下载,其中在老外的 http://www.javacodegeeks.com/2012/12/guava-splitter-vs-stringutils.html 这篇文章中进行了stringutil的对比:

    首先看两者的用法:

        // Apache StringUtils...   
        String[] tokens1 = StringUtils.split("one,two,three",',');  
                  
        // Guava splitter...   
        Iterable<String> tokens2 = Splitter.on(',').split("one,two,three");  

     StringUtils静态类来的,spiltter的语法中则要new对象,但splitter中,一个优点
    是,可以去掉多余的空格等,比如:

        Splitter splitter = Splitter.on(',').omitEmptyStrings().trimResults();  
                  
                Iterable<String> tokens3 = splitter.split("one,,two,three");  
                Iterator<String> iterator = tokens3.iterator();  
                while (iterator.hasNext()) {  
                    String value = iterator.next();  
                    System.out.println(value);  
        }  

    输出结果是:.

        one  
        two  
        three  

       这个则比较方便。要注意的是splitter返回的是Iterable<String>,这个和StringUtil
    有点不同。

    效率方面的对比,作者作了比较:

        final String numberList = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten";  
        long startTime = System.currentTimeMillis();  
        for (int i = 0; i < 1000000; i++) {  
            StringUtils.split(numberList,',');  
        }  
        System.out.print("StringUtils split expenditure time : ");  
        System.out.println(System.currentTimeMillis() - startTime);  
                  
        startTime = System.currentTimeMillis();  
        for (int i = 0; i < 1000000; i++) {  
            Splitter.on(',').split(numberList);  
        }  
        System.out.print("Splitter split expenditure time : ");  
        System.out.println(System.currentTimeMillis() - startTime);  

    输出结果:

        StringUtils split expenditure time : 672  
        Splitter split expenditure time : 312  

    splitter快上!主要是怀疑因为splitter返回的是Iterable<String>,不用每次new String对象。

    再来一个测试:

        final String numberList = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten";  
                long startTime = System.currentTimeMillis();  
                for (int i = 0; i < 1000000; i++) {  
                    final String[] numbers = StringUtils.split(numberList,',');  
                    for (String number : numbers) {  
                        number.length();  
                    }  
                }  
                System.out.print("StringUtils split expenditure time : ");  
                System.out.println(System.currentTimeMillis() - startTime);  
                  
                  
                Splitter splitter = Splitter.on(',');  
                startTime = System.currentTimeMillis();  
                for (int i = 0; i < 1000000; i++) {  
                    Iterable<String> numbers = splitter.split(numberList);  
                    for (String number : numbers) {  
                        number.length();  
                    }  
                }  
                System.out.print("Splitter split expenditure time : ");  
                System.out.println(System.currentTimeMillis() - startTime);  

    结果如下:

        StringUtils split expenditure time : 735  
        Splitter split expenditure time : 2062  

    spitter这次更慢了! 所以感觉,如果StringUtil够用的话,其实用StringUtil其实很好的拉。

  • 相关阅读:
    jquery autocomplete
    hibernate 数据缓存
    Python变量类型
    Python基础语法
    Python环境搭建
    Python简介
    python下载地址
    第十、十一章,软件测试和软件演化
    第九章,软件实现
    第八章,面向对象设计
  • 原文地址:https://www.cnblogs.com/sungang/p/3641154.html
Copyright © 2011-2022 走看看