如何正确使用二维数组存储多个字符串split()的结果?

时间:2013-04-03 20:17:44

标签: java arrays string multidimensional-array split

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

2 个答案:

答案 0 :(得分:5)

您的阵列定义存在问题:

String[][] arr = new String[numLines.size()][];

阵列的第二维未初始化。您无法使用当前设置访问索引1。在尝试访问数组之前尝试加载数组的数据。

在定义它之后,你应该用(我假设的)从数据持有者(比如一个列表,一个读者,一个文件,你给它命名)中的每个“行”(不管它是什么)填充你得到你的{ {1}}号来自。

修改

当正确发现einpoklum时,数组的实际分配是通过非常numLines方法完成的。实际上,您正在访问空引用

split()

但人口是在同一次迭代中完成的(我正在考虑):

arr[i][1].split("--", 2); //NPE since arr[i] returns null

答案 1 :(得分:3)

您不需要自己分配内部数组,String.split()会为您执行此操作。你得到异常的原因是你应用方括号两次,即你希望arr[i]是一个非空数组(并且大小至少为2),这样你就可以分配给{{1 - 事实并非如此。

问题是,您甚至需要才能使用arr[i][1]。我想你想要做的是以下几点:

arr[i][whatever]