StringTokenizer返回null而不是String

时间:2014-10-04 01:46:12

标签: string stringtokenizer

代码段意味着从文本文件中提取一行文本,将其分成单独的标记,并将每个标记存储在数组的索引中。起初我认为问题出在文本文件中,但是直接将字符串放入编辑器中并没有解决它。

使用如下字符串:

  

“鸡|无|野兽|任何| 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] + " ");
}

输出:

  

鸡无野兽任何

2 个答案:

答案 0 :(得分:0)

不推荐使用StringTokenizer,因此应使用String split方法,它适用于您的代码

    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));
    }

}

答案 1 :(得分:0)

这里的主要问题是在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!