我一直在使用String[] split(String)
类的String
来分割任何给定分隔符的字符串,它运行正常。
但是,现在预计会使用StringTokenizer
重新计算相同的逻辑。但是使用一个而不是另一个的差异和好处是什么。
另外,我觉得String[]
在单个调用中返回的split()
比使用类StringTokenizer
的对象更有效。
答案 0 :(得分:18)
- > String.split()
和Pattern.split()
为您提供了一个简单的语法来完成后者,但这基本上就是他们所做的一切。如果您想要解析生成的字符串,或者根据特定令牌中途更改分隔符,它们将无法帮助您。
- > StringTokenizer
比String.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