为什么不推荐使用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年代早期变得非常普遍,因此实际上是无用的。