我有一个二维ArrayList,在while循环中填充了字符串值。值来自CSV文件,使用BufferedReader
读取,然后使用StringTokenizer
放入一维ArrayList。 1D ArrayList在while循环中添加到2D ArrayList。
我的问题是我无法在while循环之外访问2D数组的元素。正如您在以下代码中看到的那样:
public String[][] readInCSV(String mg) {
List<List<String>> twoDim = new ArrayList<List<String>>();
List<String> row = new ArrayList<String>();
try {
BufferedReader CSVFile = new BufferedReader(new FileReader("C:\\minuteTest.csv"));
String dataRow="";
int y=0;
while ((dataRow = CSVFile.readLine()) != null) {
StringTokenizer st = new StringTokenizer(dataRow, ",");
while(st.hasMoreTokens()){
row.add(st.nextToken());
}
System.out.println("row: " + row.get(2));
twoDim.add(row);
System.out.println("twoDimTest: " + twoDim.get(y).get(2) + " y: " + y);
row.clear();
y++;
}
for(int x=0; x<twoDim.size(); x++){
System.out.println("twoDim: " + twoDim.get(x).size());
}
CSVFile.close();
}
catch (FileNotFoundException e1) {
System.out.println("file not found: " + e1.getMessage());
}
catch (IOException e1) {
System.out.println("could not read file: " + e1.getMessage());
}
return strArray;
}
“twoDimTest”打印出while循环中“row”的确切内容,但是“twoDim”在for循环中打印出0。如果我尝试:
twoDim.get(0).get(2);
它返回一个IndexOutOfBoundsExeception。如果我尝试:
twoDim.size();
返回正确的行数。
为什么我的2D数组的行在while循环中填充,但不在while循环之外?
如何在while循环之外访问我的2D数组?
答案 0 :(得分:1)
您的外部列表包含同一内部列表的许多副本,之后您row.clear();
。
您需要为每一行创建new ArrayList<>()
,而不是清除它。