您的位置:首页 > 其它

StringTokenizer和Split性能比较

2014-06-03 17:12 253 查看
朋友问我的问题,网上搜了下,都说StringTokenizer性能要好些,不过也有反对意见,还是自己试验下。

一百万以空格区分的字符串,拆分后重新组成不带空格的串。

import java.util.Random;
import java.util.StringTokenizer;
/**
 * 
 * @author Jason Li 2014-6-3
 * StringTokenizer和Spilt速度比较
 *
 */
public class StringTest {

    public static void main(String[] args) {
        String str = buildString(1_000_000); //1.7新特性, 1000000
        long start;
        long end;

        System.out.println("-----------StringTokenizer start-----------");        
        start = System.currentTimeMillis();
        StringTokenizer st = new StringTokenizer(str);
        StringBuilder sb = new StringBuilder();
        while(st.hasMoreTokens()){
            sb.append(st.nextToken());
        }
        end = System.currentTimeMillis();
        System.out.println("StringTokenizer time use:" + (end-start));

        System.out.println("-----------StringSpilt start-----------");        
        start = System.currentTimeMillis();
        StringBuilder sb2 = new StringBuilder();
        String[] strs = str.split("\\s");
        for(String s: strs){
            sb2.append(s);
        }
        end = System.currentTimeMillis();
        System.out.println("StringSpilt time use:" + (end-start));        

    }

    //建立一个长字符串,
    //其中有空格,以便拆分成length长度的n个字符串
    private static String buildString(int length) {
        StringBuilder sb = new StringBuilder();
        Random r =new Random();
        for (int i = 0; i <length;i++ ){
            for (int j = r.nextInt(10); j>0 ;j--){
                sb.append((char)('a' + r.nextInt(26)));
            }
            sb.append(" ");
        }       
        return sb.toString();
    }
}






输出:
-----------StringTokenizer start-----------
StringTokenizer time use:131
-----------StringSpilt start-----------
StringSpilt time use:509






结论:
StringTokenizer确实更快些,至于为什么jdk里不推荐使用了,还要再研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐