代码段意味着从文本文件中提取一行文本,将其分成单独的标记,并将每个标记存储在数组的索引中。起初我认为问题出在文本文件中,但是直接将字符串放入编辑器中并没有解决它。
使用如下字符串:
“鸡|无|野兽|任何| 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] + " ");
}
输出:
鸡无野兽任何
答案 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!