18

我一直在使用class 来拆分某些给定分隔符String[] split(String)String任何字符串,并且效果很好。

但是,现在预计将使用StringTokenizer. 但是使用其中一个有什么区别和好处。

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

4

5 回答 5

22

看看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]);
于 2013-10-30T09:08:11.297 回答
2

这个

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

于 2013-10-30T09:08:39.800 回答
2

我有以下程序,

字符串“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
于 2014-05-18T08:01:35.170 回答
2

String#split接受一个正则表达式是否StringTokenizer只接受一个String将拆分字符串的。您应该始终坚持使用String#split,它比 StringTokenizer 更强大。

于 2013-10-30T09:08:17.700 回答
0

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

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

所以我想说,不要改变它,把那条线展示给建议重构它的人。也许他们有旧信息或其他很好的理由告诉你。

于 2013-10-30T09:09:59.043 回答