我正在制作将CSV文件导入String
2D数组的代码。
由于我打算将此代码应用于其他具有不同列数和行数的CSV文件,我应该使用动态数组。
但我不知道处理导入和输入一次保存在动态2D阵列中。 你能帮我找一下我的代码有什么问题吗?它没有用。
代码:
import java.io.*;
import java.util.*;
public class DataImport_1 {
private ArrayList<ArrayList<String>> arr = null;
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(new File("C:/Dropbox (CMA)/1 Research (5)/TA/new Data/SPX Index.csv"));
scanner.useDelimiter(",");
arr = new ArrayList<ArrayList<String>>();
child1 = new ArrayList<String>();
while(scanner.hasNext()){
child1.add(scanner.next());
}
arr.add(child1);
child1.clear();
scanner.close();
}
}
答案 0 :(得分:0)
使用Scanner.nextLine()
并用逗号分隔每一行或读取while循环内的整行(已经拆分为列)。现在你不做任何事!
第一种方法的例子:
Scanner scanner = new Scanner(new File("C:/Dropbox (CMA)/1 Research (5)/TA/new Data/SPX Index.csv"));
arr = new ArrayList<ArrayList<String>>();
while(scanner.hasNext()){
String line = scanner.nextLine();
String[] columns = line.split(",");
Collections.addAll(arr, columns);
}
scanner.close();
答案 1 :(得分:0)
如果要将arr
结构化为数组列表的数组列表,则需要创建多个child1
。
当你“清除”child1
时,它会清除它引用的对象,这是你刚存放在arr
中的对象,最终你会有一堆arr
条目所有引用最近清除的child1
。
对于每一行,而不是
child1.clear();
DO
child1 = new ArrayList();