53

Java 文档似乎没有提及关于弃用 for 的任何内容StringTokenizer,但我一直听说它在很久以前是如何被弃用的。是因为它有错误/错误而被弃用,还是String.split()整体上更好用?

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

4

8 回答 8

83
  1. Java 10 字符串标记器——不推荐使用
  2. Java 9 字符串标记器——不推荐使用
  3. Java 8 字符串标记器——不推荐使用
  4. Java 7 字符串标记器——不推荐使用
  5. Java 6 字符串标记器——不推荐使用
  6. Java 5 字符串标记器——不推荐使用

如果它没有被标记为已弃用,它就不会消失。

于 2011-08-08T14:49:07.897 回答
67

来自StringTokenizer的javadoc :

StringTokenizer是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。

如果您查看String.split()并将其与 进行比较StringTokenizer,则相关区别在于String.split()使用正则表达式,而StringTokenizer仅使用逐字拆分字符。因此,如果我想用比单个字符更复杂的逻辑来标记一个字符串(例如 split on \r\n),我不能使用StringTokenizer,但我可以使用String.split().

于 2011-08-08T14:48:00.593 回答
16

StringTokenizer 并没有被弃用,事实上StringTokenizer 比 String.split() 快 4 倍,并且在竞争性编程中它被许多开发人员使用。

来源:-更快的 Java 输入

于 2015-07-31T16:42:52.133 回答
1

StringTokenize 存在问题...

拆分必须使用正则表达式,StringTokenizer 使用的是 String 或 CharSequence,

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

和“ab”的 StringTokenizer。... 将只返回 {"a","b"}

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

StringTokenizer 更好、更安全的替代方案是:

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

com.google.common.base.Splitter

于 2014-07-09T09:43:07.640 回答
0

我不认为这是 String.split 方法的原因,因为 split 是解析字符串的慢方法 - 它在内部编译了一个模式。

StringTokenizer 可以替换为更多功能的类,如 java.util.Scanner,或者您可以使用模式匹配器通过正则表达式获取组。

于 2011-08-08T15:10:11.687 回答
0
  1. 不推荐使用 StringTokenizer

  2. 它的功能和输出略有不同...

例如,如果您有"aaa.aa.aa"并且想要将其拆分为 和 部分,"aaa"您可以只写:"aa""a"

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

如果你只是使用:

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

它返回一个空数组.,因为它匹配空格字符的正则表达式。所以你必须逃避它:

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

所以基本上.. split 使您能够使用正则表达式...它可能非常有用

但是 StringTokenizer 通过标记解析文本......并且标记甚至可以是特殊字符

于 2014-06-10T10:35:54.497 回答
0

StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。

以下示例显示了如何使用 String.split() 方法将字符串分解为其基本标记:

 String[] result = "this is a test".split("\\s");
于 2017-12-18T08:57:23.780 回答
-3

就我个人而言,我觉得 StringTokenizer 已被弃用,因为它只是一种非常简单的复杂方式。顾名思义,StringTokenizer 仅适用于字符串,所以为什么不直接将其作为字符串中的方法。此外,StringTokenizer 不支持 RegularExpression 不支持正则表达式,这在 90 年代末和 00 年代初期变得极为普遍,因此使其实际上毫无用处。

于 2011-08-08T14:52:12.263 回答