【发布时间】:2011-10-22 11:14:33
【问题描述】:
Java 文档似乎没有提到任何关于 StringTokenizer 的弃用,但我一直听说它在很久以前是如何被弃用的。是因为它有错误/错误而被弃用,还是String.split() 总体上更好用?
我有一些使用 StringTokenizer 的代码,我想知道是否应该认真考虑将其重构为使用 String.split(),或者弃用是否纯粹是为了方便而我的代码是安全的。
【问题讨论】:
-
StringTokenizer是一个遗留类(即有更好的替代品),但它不已被弃用。仅当类/方法有一些 严重 缺点时才会弃用。Vector也发生了类似的情况:您几乎总是可以将其替换为ArrayList,但它不是“坏”或“损坏”,因此不会被弃用。 -
@Joachim 如果可以接受 cmets 我会接受
-
StringTokenizer 有一个严重的常识性问题:它将连续的分隔符视为一个分隔符。这不是常识或传统意义上的。例如,在 csv 中,'a,,b' 表示 3 个字段,第 2 个字段为空。但在 Stringtokenizer 中,它默认将其视为只有 2 个字段,',,' 被视为 ','。这已经使许多程序员感到困惑,并使他们经历不必要的调试工作。 *** 只是不要再使用它 ***
-
@Scott Chu:同意它不像其他方法那样严谨。但是,如果您创建一个新的 ST 以便在标记值中包含分隔符,则在某种意义上,您可以通过检查每个标记是否仅包含一个分隔符作为其值来取回空值。当然,程序员有责任砍掉每个标记的最后一个字符,因为它将是一个分隔符……除非它是标记集合中的最后一个标记……呃,太痛苦了。所以我同意,使用差异。当您想将空标记值计为返回值时的方法比使用 ST 更好。
-
是的,在我看来,当 StringTokenizer 开始退居到 split() 之后,JDK 应该包含某些版本的 split,其行为类似于现在存在的 split() 但不包括开销或正则表达式的复杂性。
标签: java string split deprecated stringtokenizer