截取字符串效率比较

结论

最终,StringTokenizer在截取字符串中效率最高,不论数据量大小,几乎持平。substring则要次之,数据量增加耗时也要随之增加。split则是表现最差劲的。

究其原因,split的实现方式是采用正则表达式实现,所以其性能会比较低。至于正则表达式为何低,还未去验证。 

StringTokenizer的简单用法:

1、构造函数。

1. StringTokenizer(String str) :构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘/t’)”、“换行符(‘/n’)”、“回车符(‘/r’)”。 2. StringTokenizer(String str, String delim) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。 3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。

2、方法。 说明: 1. 所有方法均为public; 2. 书写格式:[修饰符] <返回类型> <方法名([参数列表])> 如: static int parseInt(String s) 表示:此方法(parseInt)为类方法(static),返回类型为(int),方法所需参数为String类型。

1. int countTokens() :返回nextToken方法被调用的次数。如果采用构造函数1和2,返回的就是分隔符数量(例2)。 2. boolean hasMoreTokens() :返回是否还有分隔符。 3. boolean hasMoreElements() :结果同2。 4. String nextToken() :返回从当前位置到下一个分隔符的字符串。 5. Object nextElement() :结果同4。 6. String nextToken(String delim) :与4类似,以指定的分隔符返回结果。

   //例子:   String s = new String("The Java platform is the ideal platform for network computing");   StringTokenizer st = new StringTokenizer(s);   System.out.println( "Token Total: " + st.countTokens() );   while( st.hasMoreElements() ){            System.out.println( st.nextToken() );   }   //结果为:   Token Total: 10   The   Java   platform   is   the   ideal   platform   for   network   computing       //例2:       String s = new String("The=Java=platform=is=the=ideal=platform=for=network=computing");   StringTokenizer st = new StringTokenizer(s,"=",true);     System.out.println( "Token Total: " + st.countTokens() );   while( st.hasMoreElements() ){            System.out.println( st.nextToken() );     }   //结果为:   Token Total: 19   The   =   Java   =   platform   =   is   =   the   =   ideal   =   platform   =   for   =   network   =   computing

 

 

subString 简单用法:

str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str;

str=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给str;

参数: beginIndex - 开始处的索引(包括)。 endIndex - 结束处的索引(不包括)。 返回:
指定的子字符串。 抛出: IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex。

 

split的简单用法:

Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项: java.lang.string.split split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 stringObj.split([separator,[limit]])
stringObj 必选项。要被分解的 String 对象或文字,该对象不会被split方法修改。 separator
可选项。字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
limit 可选项。该值用来限制返回数组中的元素个数(也就是最多分割成几个数组元素,只有为正数时有影响) split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。separator不作为任何数组元素的部分返回。 示例1:       String str="Java string split test";       String[] strarray=str.split(" ");       for (int i = 0; i < strarray.length; i++)           System.out.println(strarray[i]); 将输出: Java string split test

示例2:       String str="Java string split test";       String[] strarray=str.split(" ",2);//使用limit,最多分割成2个字符串       for (int i = 0; i < strarray.length; i++)           System.out.println(strarray[i]); 将输出: Java string split test

示例3:       String str="192.168.0.1";       String[] strarray=str.split(".");       for (int i = 0; i < strarray.length; i++)           System.out.println(strarray[i]); 结果是什么也没输出,将split(".")改为split("//."),将输出正确结果: 192 168 0 1

经验分享: 1、分隔符为“.”(无输出),“|”(不能得到正确结果)转义字符时,“*”,“+”时出错抛出异常,都必须在前面加必须得加"//",如split(//|); 2、如果用"/"作为分隔,就得写成这样:String.split("////"),因为在Java中是用"//"来表示"/"的,字符串得写成这样:String Str="a//b//c"; 转义字符,必须得加"//"; 3、如果在一个字符串中有多个分隔符,可以用"|"作为连字符,比如:String str="Java string-split#test",可以用Str.split(" |-|#")把每个字符串分开;

 

posted @ 2012-11-24 15:15  笔底生花  阅读(949)  评论(0编辑  收藏  举报