2

我正在尝试编写一个遍历多行文本的循环,将每一行 - 每个字符串 - 分成两个元素,结果填充一个二维数组。我目前收到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); 
    /* ... */
}
4

2 回答 2

5

数组的定义存在问题:

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); 
于 2013-04-03T20:20:01.023 回答
3

您不需要自己分配内部数组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. */
}
于 2013-04-04T08:53:54.353 回答