【问题标题】:JAVA 2D String array column numbersJAVA 2D 字符串数组列号
【发布时间】:2016-10-07 15:40:49
【问题描述】:

我有一个 CSV 文件,我必须将其读取到二维字符串数组(它必须是二维数组)

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

一、二、三、四、五

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];
        }
    }
}

【问题讨论】:

  • 请出示您的代码
  • 抱歉添加到帖子中
  • 你能知道数组的长度吗?我的意思是在阅读了 csv 之后,你能确定哪个必须是数组的长度吗?我问这个是因为一旦初始化了对象,就无法调整它的大小。
  • 您可以使用 List 例如仅添加包含值且不为空的元素。
  • 好吧,我无法确定,这就是问题所在。对此有一个测试: data[0] = 一、二、三、四、五 -> 长度必须是 5 数据[1] = 1,2,3,4 -> 长度必须是 4 并且在同一个 2D 中数组

标签: java csv multidimensional-array split


【解决方案1】:

听起来您想要一个非矩形二维数组。您需要避免在二维数组上定义第二维。这是一个例子:

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(",");
}

所有行都被读入一个列表,以便我们知道二维数组的第一个维度。每行的第二个维度由拆分操作的结果决定。

【讨论】:

  • 宾果游戏!非常感谢您的回答。
猜你喜欢
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多