为什么不推荐使用StringTokenizer?

Java文档似乎没有提及StringTokenizer废弃,但是我一直听到它很久以前被弃用的情况。 是不是因为它有错误/错误,或者是String.split()使用?

我有一些使用StringTokenizer代码,我想知道是否应该重新考虑重构它使用String.split() ,或弃用纯粹是为了方便,我的代码是安全的。

从StringTokenizer的javadoc中:

StringTokenizer是一个遗留的类,为了兼容性的原因被保留下来,尽pipe在新代码中不鼓励使用它。 build议任何需要此function的人使用String或java.util.regex包的拆分方法。

如果查看String.split()并将其与StringTokenizer进行比较,则相关的区别在于String.split()使用正则expression式,而StringTokenizer只使用逐字分割字符。 所以如果我想用比单个字符更复杂的逻辑来标记string(例如,分割\r\n ),我不能使用StringTokenizer但是我可以使用String.split()

  1. Java 8 String Tokenizer – 不推荐使用
  2. Java 7 String Tokenizer – 不推荐使用
  3. Java 6 String Tokenizer – 不推荐使用
  4. Java 5 String Tokenizer – 不推荐使用

如果没有标记为弃用,则不会消失。

StringTokenizer实际上并不被弃用, StringTokenizer的速度是String.split()的4倍 ,在竞争性的编程中它被许多开发者使用。

来源: – 更快的Javainput

有一个StringTokenize的问题…

Split必须使用正则expression式,StringTokenizer使用String或CharSequence,

"ab.".split(".")将返回{"a","b",""}

和“ab”的StringTokenizer。 …将仅返回{“a”,“b”}

这是非常棘手的! 小心点!!!

更好和更安全的替代StringTokenizer是:

更好的StrongTokenizer是在org.apache.common.lang3 …它有更多的灵活性或

com.google.common.base.Splitter

我不这么认为的原因是String.split方法,因为split是parsingstring的慢方法 – 它编译里面的一个模式。

StringTokenizer可以被replace为更多的function类,如java.util.Scanner,或者您可以使用模式匹配器通过正则expression式来获取组。

  1. StringTokenizer不被弃用

  2. 这是有点不同的function和输出…

例如,如果您有"aaa.aa.aa"并且想要将其分成"aaa""aa""a" ,则可以只写:

 new StringTokenizer("aaa.aa.aa", ".") 

如果你只是使用:

 "aaa.aa.aa".split(".") 

它返回一个空数组 ,因为它匹配正则expression式. 是一个空间性格。 所以你必须逃避它:

 "aaa.aa.aa".split("\\.") 

所以基本上..拆分使您使用正则expression式…它可以是非常有用的

但StringTokenizer通过令牌parsing文本…而令牌甚至可以是特殊字符

就我个人而言,我觉得StringTokenizer已经被弃用了,因为它只是一个非常简单的复杂的方法。 StringTokenizer顾名思义只适用于string,所以为什么不在String中做一个方法。 进一步的StringTokenizer不支持RegularExpression不支持正则expression式在90年代末和00年代早期变得非常普遍,因此实际上是无用的。

Interesting Posts