我有一个CSV文件,我必须读取到一个2D字符串数组(它必须是一个2D数组)
但是它有不同的列号,如:
一、二、三、四、五
1、2、3、4
我想把它们读入数组。我把它分开一切都很好,但是我不知道如何不用null填充缺失的列。
前面的例子是:
0: 1、2、3、4、5(长度5)
1: 1,2,3,4,null (length 5)
然而,我希望下一行的长度是4而不是5,没有null
这可能吗?
这就是我到目前为止所得到的(我知道这很糟糕):
public static void read(Scanner sc) {
ArrayList<String> temp = new ArrayList<>();
while(sc.hasNextLine()) {
temp.add(sc.nextLine().replace(" ", ""));
}
String[] row = temp.get(0).split(",");
data = new String[temp.size()][row.length];
for (int i = 0; i < temp.size(); ++i) {
String[] t = temp.get(i).split(",");
for (int j = 0; j < t.length; ++j) {
data[i][j] = t[j];
}
}
}
听起来你想要一个非矩形的二维数组。您将希望避免在2D数组上定义第二次元。下面是一个例子:
final Path path = FileSystems.getDefault().getPath("src/main/resources/csvfile");
final List<String> lines = Files.readAllLines(path);
final String[][] arrays = new String[lines.size()][];
for (int i = 0; i < lines.size(); i++) {
arrays[i] = lines.get(i).split(",");
}
所有行都被读入List中,这样我们就知道了二维数组的第一个维度。每行的第二个维度由分割操作的结果决定。