当在对字符串进行分割操作的时候,最熟悉的估计就是split()方法了,但是,有的老铁却说尽量不要使用split(),推荐使用 StringTokenizer 这个类的效率会好点,不知道老铁,哪来的结论?

大师兄

下面是我对这个问题的测试。

大师兄

下面是测试代码:

    private static final String TTM = "0|probeName_lxk|188.188.8.118|10999|10.188.16.110|40998|grcb8583|{\"number\":\"78\",\"convers_id\": 12864829, \"msg_size\": 876, \"mti\": \"\", \"STAN\": \"  3133\", \"F38\": \"交易成功\", \"RC\": \"0000\", \"F41\": \"文件(PHPFG0),业务种类(000)\", \"mid\": \"\"}|||1|876|0|0|0|0|0|8|0|0|0|0|0|0|0|0|0|0|1536646259|1536646259923|2018-09-11T06:10:59|3166439542|180097134|6|0|7"; 
    private static void testSplitEfficiency() { 
        while (true){ 
            split(); 
            stringTokenizer(); 
        } 
    } 
 
    private static void stringTokenizer() { 
        StringTokenizer st = new StringTokenizer(TTM, "\\|"); 
        StringBuilder stringBuilder = new StringBuilder(); 
        while(st.hasMoreTokens()) { 
            stringBuilder.append(st.nextToken()); 
        } 
        String s = stringBuilder.toString(); 
    } 
 
    private static void split() { 
        String[] split = TTM.split("\\|"); 
        StringBuilder stringBuilder = new StringBuilder(); 
        for (String s : split) { 
            stringBuilder.append(s); 
        } 
        String s = stringBuilder.toString(); 
    }

从上面的jprofiler的时间占比的图来看,这个 StringTokenizer 没有优势啊。

难道是我测试的姿势不对吗?

还有就是从出生时间来看:

大师兄

大师兄

这个split是后面出生的,既然是后面新生的,肯定是比之前的好,才会长江后浪推前浪。也看得出split是有存在的价值的。

实践出真知,至于那些使用打印时间来测试的是不是low了点呀。

有没有谁站出来,反对一下的,指出来我哪里不对啦的。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!