Java字符串分割和查找优化
来源:互联网 发布:炒黄金数据软件 编辑:程序博客网 时间:2024/05/19 16:50
字符串的分割和查找在实际软件开发过程中用的比较多,下面,主要介绍三种字符串的分割方法,比较它们之间的效率。
1、对于初学者,通常字符串的分割主要使用split方法,String对象的split()方法:
public String[] split(String regex) 传入的参数regex为正则表达式
String.split()方法使用简单,功能强大,但是,在性能敏感的系统中频繁使用这个方法是不可取的。
2、使用效率更高的StringTokenizer类分割字符串
StringTokenizer类是JDK中提供的专门用来处理字符串分割子串的工具类。它的典型构造函数如下:
public StringTokenizer(String str,String delim)
其中,str参数是要分割处理的字符串,delim是分割符号
3、更优化的字符串分割方式
使用String的两个方法indexOf和subString方法混合。
以下是三种方法的实例代码:
public static void main(String[] args) { String orgStr = null; StringBuffer sb = new StringBuffer(); for(int i = 0; i < 1000; i++) { sb.append(i); sb.append(";"); } orgStr = sb.toString(); //使用split方法 long splitBegin = System.currentTimeMillis(); for(int i = 0; i < 10000; i++) { orgStr.split(";"); } long splitOver = System.currentTimeMillis(); System.out.println(splitOver-splitBegin); //使用StringTokenizer类 long StringTokenizerBegin = System.currentTimeMillis(); StringTokenizer st = new StringTokenizer(orgStr,";"); for(int i = 0; i < 10000; i++) { while(st.hasMoreTokens()) { st.nextToken(); } st = new StringTokenizer(orgStr, ";"); } long StringTokenizerOver = System.currentTimeMillis(); System.out.println(StringTokenizerOver-StringTokenizerBegin); //使用String的两个方法indexOf和subString方法结合 String tmp = orgStr; long indexOfsubStringBegin = System.currentTimeMillis(); 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 = orgStr; } long indexOfsubStringOver = System.currentTimeMillis(); System.out.println(indexOfsubStringOver-indexOfsubStringBegin); }
在笔者的计算机上,split方法耗时2847ms,StringTokenizer类耗时1347ms,使用String的两个方法indexOf和subString方法混合耗时452ms,很直观的可以看出,不同方法之间对字符串分割效率差别还是挺大的。
在软件开发过程中,经常会遇到一个字符串的开始和结束子串是否等于某个子串。我们通常会使用startsWith,endsWith方法实现。通过测试,发现chatAt方法效率远大于上述的两个方法;例子如下:
public static void main(String[] args) { String str = "abceeeeeeeeeeeeeeeeeeeeeeeeabc"; int len = str.length(); long charAtBegin = System.currentTimeMillis(); for(int i = 0; i < 1000000; i++) { if(str.charAt(0)=='a' && str.charAt(0)=='b' && str.charAt(0)=='c'); if(str.charAt(len-3)=='a' && str.charAt(len-2)=='b' && str.charAt(len-1)=='c'); } long charAtOver = System.currentTimeMillis(); System.out.println(charAtOver-charAtBegin); long startBegin = System.currentTimeMillis(); for(int i = 0; i < 1000000; i++) { if(str.startsWith("abc")); if(str.endsWith("abc")); } long endOver = System.currentTimeMillis(); System.out.println(endOver-startBegin); }
在笔者的计算机中,用charAt方法耗时16ms,而startsWith,endsWith方法耗时35ms。因此,在性能敏感的系统中,charAt方法是个不错的选择。
- Java字符串分割和查找优化
- java 字符串分割和查找 性能
- Java字符串分割与优化
- 字符串分割方式和查找方法比较
- java开发优化之字符串分割
- java字符串常用操作(查找、截取、分割)
- java分割字符串和正则表达式
- java 字符串分割 StringTokenizer和split
- java分割字符串和正则表达式
- java字符串的分割和替换操作
- Java中的判断字符串是否为空 和 字符串分割
- java分割字符串
- Java字符串分割
- java 字符串分割
- Java分割字符串
- java 字符串分割
- java 分割字符串
- Java中的字符串分割
- Wordpress 3.8.2补丁分析 HMAC timing attack
- CodeBlocks 创建dll C#调用
- 小球撞墙
- spark入门教程及经验总结
- 改变ListView某一行或者几行的颜色
- Java字符串分割和查找优化
- 解决ios静态库中的类别(category)在工程中不能使用
- Java读取XML文件(2)读取属性
- spring学习笔记(6)——bean的作用域
- VS发布 错误未能将文件 复制到
- 循环栈队列
- centos mysql yum 安装
- android TextView相关
- iOS autolayout和sizeclass