我一直在使用String
类的String[] split(String)
来分割给定分隔符的任何字符串,并且它工作正常。使用StringTokenizer和String.split()之间的区别?
但是,现在预计将重新考虑与StringTokenizer
相同的逻辑。但是使用其中一个的区别和好处是什么。
此外,我觉得String[]
返回split()
在一次调用是非常有效的选择比使用StringTokenizer
类的对象。
我一直在使用String
类的String[] split(String)
来分割给定分隔符的任何字符串,并且它工作正常。使用StringTokenizer和String.split()之间的区别?
但是,现在预计将重新考虑与StringTokenizer
相同的逻辑。但是使用其中一个的区别和好处是什么。
此外,我觉得String[]
返回split()
在一次调用是非常有效的选择比使用StringTokenizer
类的对象。
- >String.split()
和Pattern.split()
给你一个简单的语法来做后者,但这基本上就是他们所做的一切。如果你想解析结果字符串,或者根据特定标记中途改变分隔符,他们将不会帮助你。
- >StringTokenizer
比String.split()
更具限制性,而且使用起来也有点烦琐。它本质上是为了抽出由固定子字符串分隔的令牌而设计的。由于这个限制,它的速度是String.split()
的两倍。 (请参阅我的comparison of String.split()
and StringTokenizer
。)它也早于正则表达式API,其中String.split()
是其中的一部分。
从我的定时中,您会注意到String.split()
仍然可以在典型机器上以几毫秒标记数千个字符串。另外,与StringTokenizer
相比,它具有以字符串数组的形式提供输出的优势,这通常是您想要的。如StringTokenizer
所提供的使用Enumeration
在大多数情况下也是“句法上的挑剔”。从这个角度来看,StringTokenizer
现在有点浪费空间,你也可以使用String.split()
。从这个链接
StringTokenizer从内存角度来看是否更轻?看起来像'split()'会增加大约2倍。 – Larsenal
它们处理字符串输出的方式也有所不同。理论上,如果你的字符串以空格开头(s)StringTokenizer忽略这些并返回第一个字符串,但是拆分功能会在返回的数组中创建一个空字符串。 –
看看在JavaDocs
的StringTokenizer是保留兼容性 原因,虽然它的使用是在新代码气馁的遗留类。建议 任何寻求此功能的人都使用字符串 或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]);
+1 split()更清洁 –
String#split
接受一个正则表达式是否StringTokenizer
只是接受String
,通过该将分割字符串。您应该始终坚持String#split
,它比StringTokenizer更健壮。
阅读this
的StringTokenizer是保留兼容性的原因,虽然它的使用是在新代码气馁的遗留类。建议任何寻求此功能的人使用String或java.util.regex包的拆分方法。
http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html 说:
的StringTokenizer是保留兼容性的原因,虽然它的使用是在新代码气馁的遗留类。建议任何寻求此功能的人使用String或java.util.regex包的拆分方法。
所以我会说,不要改变它,并向建议重构它的人显示该行。也许他们有旧信息或另一个很好的理由告诉你。
这里
答案是链路应答(从我的角度来看)的问题:http://lavnish.blogspot.com/2008/05/stringsplit-vs-stringtokenizer.html
我有以下程序,
字符串“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
输出: 令牌 - > 1 令牌 - > 2 令牌 - >取值 令牌 - > 3 令牌 - > 4 I - > 5 长度---> 8 值 - - > 1个 值 - > 2 值 - >取值 值 - > 值 - > 3 值 - > 值 - > 值 - > 4 – user2114253
参见本:http://stackoverflow.com/questions/691184/scanner-vs-stringtokenizer-vs-string-split – Jhanvi
的StringTokenizer很少使用这些天。我会看看Scanner。 –