【问题标题】:Java: Tokenizer get token after next tokenJava:标记器在下一个标记之后获取标记
【发布时间】:2018-08-14 22:09:06
【问题描述】:

有没有更好的方法在next token 之后获取token

这就是我现在的做法:

StringTokenizer inputTokens2 = new StringTokenizer(input);
while (inputTokens2.hasMoreTokens()){
    StringTokenizer nextToken = new Stringtokenizer(inputTokens2.nextToken());
}

我想要实现的是获取用户输入的号码,以空格“”分隔,并确定其电话号码是否有效。但是,如果数字包含例如“...20 5...”,那么我必须检查两个版本的数字“...25....”或“...205....”。这就是为什么我想在下一个之后使用Token。如果下一个Token 以“0”结尾,而其后的token 是个位数,则有两个版本。

【问题讨论】:

  • 只打两次nextToken()?更好的是,根本不要使用StringTokenizer
  • @shmosel nextToken() 返回 string 而不是 StringTokenizer 所以我不能使用两次
  • 为什么要标记nextToken 的结果?调用nextToken 只需将StringTokenizer 移动到下一个可用令牌,因此调用任意多次即可获得所需的效果
  • @aggtr 我不确定你的意思。你为什么希望它返回StringTokenizer
  • StringTokenizer 不建议在新代码中使用。它只是出于向后兼容性的原因。我赞同@shmosel 所说的,最好不要使用它,但是从一个返回的令牌中创建一个新的令牌没有任何意义。

标签: java string token stringtokenizer


【解决方案1】:

不鼓励使用 StringTokenizer。 Java有"字符串".split("\s"),推荐使用。

 String[] result = input.split("\\s");
 for (int x=0; x<result.length; x++)
     System.out.println(result[x]);

你可以在oracle网站的官方文档上查看。

【讨论】:

    【解决方案2】:

    为了找出以空格分隔的值,与.split( regex ) 相比,StringTokenizer 的运行效率非常高。

    StringTokenizer 主要提供空格分隔值的字符串,可以如下使用:

     StringTokenizer st = new StringTokenizer(input);
     while( st.hasMoreTokens() ) System.out.println( st.nextToken() );
    

    虽然 Java8 文档建议使用 .split() 而不是 Tokenizer,但可以在此处了解更多信息:https://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2020-05-20
      相关资源
      最近更新 更多