【问题标题】:StringTokenizer returns null instead of StringStringTokenizer 返回 null 而不是 String
【发布时间】:2014-10-04 01:46:12
【问题描述】:

该代码段旨在从文本文件中提取一行文本,将其分成单独的标记,并将每个标记存储在数组的索引中。一开始还以为是文本文件的问题,但是直接把字符串放到编辑器里面并没有解决。

使用字符串,例如:

“鸡|无|野兽|任何|0|1|1|嘿鸡!”

带有分隔符的 StringTokenizer 对象 |将前四个标记作为正确的字符串返回,但其余四个为 null。

有趣的是,另一个字符串:

“豺狼人|无|一般|任何|2|2|2|嘲讽|嘲讽”

将前五个标记作为正确的字符串返回,但其余四个也为 null。

如果问题出在最后四个标记上,为什么 StringTokenizer 会以这种方式返回空值?

代码:

String[] parameter = new String[10];
String rawTxt = "Chicken|None|Beast|Any|0|1|1|Hey Chicken!";
StringTokenizer t = new StringTokenizer(rawTxt, "|");
for (int i = 0; i < t.countTokens(); i++) {
    parameter[i] = t.nextToken();
    System.out.print(parameter[i] + " ");
}

输出:

鸡无野兽

【问题讨论】:

    标签: string stringtokenizer


    【解决方案1】:

    StringTokenizer 已弃用,因此应使用字符串拆分方法,它适用于您的代码

        import java.util.Arrays;
    
     public class MainClass {
        public static void main(String[] args) {
        String[] parameter = new String[10];
        String rawTxt = "Chicken|None|Beast|Any|0|1|1|Hey Chicken!";
        String[] split = rawTxt.split("\\|");
        System.out.println(Arrays.toString(split));
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      这里的主要问题是countToken()for 循环的条件部分中使用不当 - 因为这个数字随着每个下一个令牌的消耗而减少。

      很遗憾,可以应用以下修复:

      System.out.println("tokens: " + t.countTokens());
      for (int i = 0, n = t.countTokens(); i < n; i++) {
          parameter[i] = t.nextToken();
          System.out.println("tokens left: " + t.countTokens() + ", " + parameter[i] + " ");
      }
      

      它会按预期输出正确的结果:

      tokens: 8
      tokens left: 7, Chicken 
      tokens left: 6, None 
      tokens left: 5, Beast 
      tokens left: 4, Any     <--- when i reaches 4 the condition i < t.countTokens() becomes false
      tokens left: 3, 0 
      tokens left: 2, 1 
      tokens left: 1, 1 
      tokens left: 0, Hey Chicken! 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 2017-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多