如何正确使用二维数组来存储多个字符串的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); 
    /* ... */
}

数组的定义有一个问题:

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. */
}

相关内容

  • 没有找到相关文章

最新更新