我试图编写一个循环,遍历几行文本,将每行(每个字符串)分成两个元素,结果填充一个二维数组。我目前得到一个java.lang.ArrayIndexOutOfBoundsException: 0
错误与下面的代码,触发split()
行。我想取split()
调用的结果,并将其与程序的其余部分一起使用。此外,如果我没有在第二个数组框中放入整数,我就会得到编译错误-那里需要一个参数。
String[][] arr = new String[numLines.size()][];
for(int i = 0 ; i < numLines.size(); i++) {
arr[i][1].split("--", 2);
/* ... */
}
数组的定义有一个问题:
String[][] arr = new String[numLines.size()][];
数组的第二次维未初始化。您无法使用当前设置访问索引1
。在尝试访问数组之前,请尝试加载数组的数据。
在定义它之后,您应该用(我假设)来自数据持有人(例如,列表,阅读器,文件,您可以命名它)的每个"行"(无论它是什么)填充它,您从中获得numLines
编号。
编辑
正如einpoklum正确指出的那样,数组的实际分配是由split()
方法完成的。实际上,您访问的是空引用
arr[i][1].split("--", 2); //NPE since arr[i] returns null
但是人口是在同一次迭代中完成的(我正在取):
arr[i] = lines.get(i).split("--", 2);
您不需要自己分配内部数组,String.split()
会为您做这些。你得到异常的原因是,你应用方括号两次,即你期望arr[i]
是一个非空数组(和大小至少2),这样你就可以分配给arr[i][1]
-这不是情况。
arr[i][whatever]
。我认为你应该做的是:
ArrayList<String> lines;
/*
* you add your lines to the 'lines' here somehow.
*/
String[][] arr = new String[lines.size()][];
for(int i = 0; i < lines.size(); i++) {
arr[i] = lines.get(i).split("--", 2);
/* etc. */
}