【问题标题】:Why should I use StringTokenizer when I have split function? [duplicate]有 split 功能时为什么要使用 StringTokenizer? [复制]
【发布时间】:2020-03-02 04:37:25
【问题描述】:

在我的理解中,StringTokenizer 将字符串划分为标记,这些标记在打印时会根据分隔符产生与拆分函数相同的结果。例如,考虑以下代码:

String str="This is a text.";
StringTokenizer st=new StringTokenizer(str);
while(st.hasMoreTokens()) {
    System.out.println(st.nextToken());
}

还有这个:

String str="This is a text.";
String st[]=str.split(" ");
for(int i=0;i<st.length;i++) {
    System.out.println(st[i]);
}

在这两种情况下,输出都是:

This
is
a
text.

既然可以用 split 功能实现同样的功能,为什么还要使用 StringTokenizer?

【问题讨论】:

  • 简单。你不应该使用StringTokenizer。它的 Javadoc 声称它已经过时了。
  • StringTokenizer 的一个优点是它会返回它拆分的字符。 String.split() 没有,它只是吃定界符。
  • @Dawood 我在Java SE 8 docs 中找不到“过时的”。
  • @TestCase 文档说:“StringTokenizer 是一个遗留类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人使用 split 方法使用 String 或 java.util.regex 包来代替”。这意味着该类已过时,即使没有明确使用“过时”一词。

标签: java string


【解决方案1】:

请注意StringTokenizer 的文档中的以下内容:

StringTokenizer 是为了兼容性而保留的遗留类 原因尽管在新代码中不鼓励使用它。推荐 任何寻求此功能的人都使用 String 的 split 方法 或 java.util.regex 包。

所以建议是:不要使用它。它只是为了避免破坏旧代码。

【讨论】:

    【解决方案2】:

    两者都做同样的事情。

    StringTokenizer 是一个遗留类,出于兼容性原因而保留。 不鼓励在新代码中使用它。建议改用String的split方法或者java.util.regex包。

    来自 Java 官方文档。

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多