JAVA 2D字符串数组列号

时间:2016-10-07 15:40:50

标签: java csv multidimensional-array split

我有一个CSV文件,我必须读取2D字符串数组(它必须是2D数组)

但是它有不同的列号,例如:

  

一,二,三,四,五

     

1,2,3,4

所以我想把它们读成数组。我拆分它一切都很好,但我不知道如何用NULL填充缺失的列。

前面的例子是:

  

0:一,二,三,四,五(长度5)

     

1:1,2,3,4,null(长度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];
        }
    }
}

1 个答案:

答案 0 :(得分:1)

听起来你想要一个非矩形的二维数组。您需要避免在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,以便我们知道2D数组的第一个维度。每行的第二个维度由拆分操作的结果决定。