为什么不推荐使用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() 。 
- Java 8 String Tokenizer – 不推荐使用
- Java 7 String Tokenizer – 不推荐使用
- Java 6 String Tokenizer – 不推荐使用
- 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式来获取组。
- 
StringTokenizer不被弃用 
- 
这是有点不同的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年代早期变得非常普遍,因此实际上是无用的。