使用StringTokenizer和String.split()之间的区别?

时间:2013-10-30 09:05:39

标签: java string split stringtokenizer

我一直在使用String[] split(String)类的String来分割任何给定分隔符的字符串,它运行正常。

但是,现在预计会使用StringTokenizer重新计算相同的逻辑。但是使用一个而不是另一个的差异和好处是什么。

另外,我觉得String[]在单个调用中返回的split()比使用类StringTokenizer的对象更有效。

7 个答案:

答案 0 :(得分:18)

- > String.split()Pattern.split()为您提供了一个简单的语法来完成后者,但这基本上就是他们所做的一切。如果您想要解析生成的字符串,或者根据特定令牌中途更改分隔符,它们将无法帮助您。

- > StringTokenizerString.split()更具限制性,并且使用起来也有点笨拙。它主要用于拉出由固定子串分隔的令牌。由于这种限制,它的速度大约是String.split()的两倍。 (请参阅我的comparison of String.split() and StringTokenizer。)它也早于正则表达式API,其中String.split()是其中的一部分。

您会从我的时间中注意到,String.split()仍然可以在典型计算机上将数千个字符串标记为几毫秒。此外,它具有优于StringTokenizer的优势,它可以将输出作为字符串数组提供,这通常是您想要的。使用由Enumeration提供的StringTokenizer,在大多数情况下过于“语法上挑剔”。从这个角度来看,StringTokenizer现在有点浪费空间,你也可以使用String.split()

通过此链接回答

答案 1 :(得分:17)

查看JavaDocs

  

StringTokenizer是为保持兼容性而保留的旧类   原因虽然在新代码中不鼓励使用它。建议   任何寻求此功能的人都使用String的split方法   或者改为java.util.regex包。

     

以下示例说明了String.split方法的用法   用于将字符串分解为其基本标记:

 String[] result = "this is a test".split("\\s");
 for (int x=0; x<result.length; x++)
     System.out.println(result[x]);

答案 2 :(得分:1)

String#split接受正则表达式,StringTokenizer是否只接受将String分割字符串的String#split。你应该始终坚持{{1}},它比StringTokenizer更强大。

答案 3 :(得分:1)

阅读this

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用String的split方法或java.util.regex包。

答案 4 :(得分:1)

我有以下程序,

字符串“x”是一个分隔的标签 12s34;

    public class Testoken {
        public static void main(String[] args) {
            String x = "1   2   s       3           4   ";
            StringTokenizer st = new StringTokenizer(x,"\t");
            int i = 0;
            while(st.hasMoreTokens()){
                System.out.println("token-->"+st.nextToken());            
                i++;
            }
            System.out.println("i-->"+i);//elements from tokenizer
            String [] a = x.split("\t");
            System.out.println("length--->"+a.length);
            for(int y = 0;y<a.length;y++){
            System.out.println("value-->"+a[y]);//elements from split
            }
        }
    }   





Output: 

token-->1 
token-->2 
token-->s 
token-->3 
token-->4 
i-->5 
length--->8 
value-->1 
value-->2 
value-->s 
value--> 
value-->3 
value--> 
value--> 
value-->4

答案 5 :(得分:0)

http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html 说:

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用String的split方法或java.util.regex包。

所以我想说,不要改变它并向推荐重构它的人显示该行。也许他们有旧信息或其他有理由告诉你。

答案 6 :(得分:0)

这是一个回答(从我的观点来看)问题的链接:http://lavnish.blogspot.com/2008/05/stringsplit-vs-stringtokenizer.html