随风而逝的StringTokenizer[StackOverflow问答]

数年以前,在刚开始接触Java时,曾经学习过一个用于分割字符串的工具类:StringTokenizer。

例如将字符串"this is a test"按照空白字符进行分割,StringTokenzier的用法示例如下:

StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
    System.out.println(st.nextToken());
}

虽然Java文档中似乎没有将StringTokenizer标记为deprecated,但实际上这个类已经很少有人在使用了。其功能已经为String.split()方法所取代,上例的字符串可以使用String.split()方法进行分割:

String tokens[] = "this is a test".split();
for (String token : tokens) {
    System.out.println(token);
}

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

上面的文字引用自JavaDoc:“StringTokenizer是一个遗留类,之所以被保留是出于兼容性的考虑,但是在编写新的代码时已经不再鼓励使用。如果需要使用其功能,建议使用String类的split方法或者java.util.regex包取而代之”。

Deprecation only happens when the class/method has some serious drawbacks. A similar situation happens with Vector: you can almost always replace it with an ArrayList, but it's not "bad" or "broken", therefore it's not deprecated.

只有当某个类或者方法包含严重的缺陷时,才会被标记为“过时(deprecated)”。与之类似的情形还有Vector:你几乎总是可以使用ArrayList替代Vector,但这并不是说Vector不好或者不能用,因此Vector并没有被标记为deprecated

如果观察一下String.split()并将其与StringTokenizer进行比较,可以发现它们的不同之处:String.split()使用的是正则表达式,而StringTokenizer只是简单地逐字拆分。因此如果需要使用比单个字符更加复杂的逻辑对字符串进行拆分时,就只能放弃StringTokenizer,使用String.split()。

参考:http://stackoverflow.com/questions/6983856/why-is-stringtokenizer-deprecated

本文链接:http://bookshadow.com/weblog/2014/12/05/why-is-stringtokenizer-deprecated/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码