String类的split()方法与StringTokenizer方法

本文对比了Java中split方法和StringTokenizer类的功能及性能。两者均可实现字符串的拆分,但StringTokenizer从JDK1.0起就已提供,而split方法则是从JDK1.4开始提供的。在性能方面,通过实验数据表明StringTokenizer的表现更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于split和StringTokenizer我们分别来看两个例子:

StringTokenizer:

String str = "111,222,333,444,555,666,777";

        StringTokenizer commaToken = new StringTokenizer(str, ",");

        while (commaToken.hasMoreTokens()) {
            System.out.println(commaToken.nextToken());
        }

split:

String str = "111,222,333,444,555,666,777";

        String[] num = str.split(",");
        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }

两个例子的打印信息都如下所示:

111
222
333
444
555
666
777


关于split和StringTokenizer的性能问题,网络资料和实际用数据测试的结果都是 StringTokenizer的性能要优于split。

1.区别
  - split从JDK 1.4开始提供, StringTokenizer从JDK 1.0开始提供
  - split函数用分割符拆分时, 如果是空字符串,就会输出文字串。但StringTokenizer会把空字符串去掉。默认情况下,最后的文字串是空字符串时,两种方法都会去掉空字符串。但是在Split 函数中想要保留空字符串时,可以使用limit 参数。
  - 拆分方式: 
   split 是使用正则表达式来拆分, StringTokenizer是以文字串拆分
   split的分隔符是 ^, *,| 等文字串时需要在分隔符前加 "\\" 

2.性能
- 下面测试例子的结果
   . split : 1121092
   . StringTokenizer : 423797
- 性能测试结果(请看附件):

  Sun 公司建议使用split 或 其他一些时候用正则表达式的解决方式。但实际测试表明 StringTokenizer 的性能比split 要好。所以可以在不同的开发环境选择不同的方式。

 

3.测试代码

package client;
import java.util.StringTokenizer;

public class SplitTest {
	private static final String DELIM = "|";
	
    private static void useStringTokenizer(String input)   
    {   
        StringTokenizer st = new StringTokenizer(input, DELIM);   
        while (st.hasMoreElements()) { 
        	String token = st.nextElement().toString();        
        	System.out.println("Split = " + token);      
        }   
    } 
    
    private static void useSplit(String input)   
    {   
        String[] splitStr = input.split("\\|", 10);
        int splitLength = splitStr.length;
        for(int i = 0; i < splitLength; i++) {
            System.out.println("Split : " + splitStr[i]);
         }
        //System.out.println(Arrays.asList(fields));   
    } 
    
	public static void main(String[] args) {
        String input = "1|2|3||5|||8||";   
        long start1 = System.nanoTime();
        useStringTokenizer(input);
        System.out.println(System.nanoTime() - start1);
        long start2 = System.nanoTime();;
        useSplit(input);
        System.out.println(System.nanoTime() - start2);
	}
}
4.测试结果
Split = 1
Split = 2
Split = 3
Split = 5
Split = 8
423797
Split : 1
Split : 2
Split : 3
Split : 
Split : 5
Split : 
Split : 
Split : 8
Split : 
Split : 
1121092


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值