字符串分割方式和查找方法比较

以下简单的介绍字符串分割的三种方式的不同点和速度

public class StringSplit {
    public static void main(String[] args) {
        String orgStr = null;
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 10000; i++) {
            sb.append(i);
            sb.append(";");
        }
        orgStr = sb.toString();
        StringSplit ss = new StringSplit();
        long beginTime = System.currentTimeMillis();

        ss.split01(orgStr);
        long endTime = System.currentTimeMillis();
        System.out.println("方法1用时:"+(endTime -beginTime));
         beginTime = System.currentTimeMillis();
        ss.split02(orgStr);
         endTime = System.currentTimeMillis();
        System.out.println("方法2用时:"+(endTime -beginTime));
         beginTime = System.currentTimeMillis();
        ss.split03(orgStr);
         endTime = System.currentTimeMillis();
        System.out.println("方法3用时:"+(endTime -beginTime));

    }
    /**
     * 此方法运行时间 花费了3923ms,split()方法使用简单,功能强大,但是,在性能敏感的系统中频繁使用这个方法是不可取的
     * @param str
     */
    public void split01(String str){
        for (int i = 0; i < 10000; i++) {
            str.split(";");
        }
    }
    /**
     * 此方法运行时间花费了3721ms,即使在这段代码中StringTokenizer对象被不断创建并销毁,但其效率仍然明显高于split方法
     * @param str
     */
    public void split02(String str){
        StringTokenizer st = new StringTokenizer(str,";");
        for (int i = 0; i < 10000; i++) {
            while(st.hasMoreTokens()){
                st.nextToken();
            }
            st= new StringTokenizer(str,";");
        }
    }
    /**
     * 使用indexOf()和subString()的算法仅仅花费了828ms,便 执行完成,其性能远远超过前两种方式,由这个方法可以看出,
     * 这种方式最适合作为高频函数使用。
     * @param str
     */
    public void split03(String str){
        String tmp = str;
        for (int i = 0; i < 10000; i++) {
            while(true){
                String splitStr = null ; 
                int j = tmp.indexOf(";");  //找到分隔符的位置
                if(j<0)break;   //没有分隔符的存在
                splitStr = tmp.substring(0,j);//找到分隔符,截取子符串
                tmp = tmp.substring(j+1);  //剩下需要处理的字符串
            }
            tmp = str;
        }
    }
}

运行效果图:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值