【问题标题】:Reading array from comma separated text file从逗号分隔的文本文件中读取数组
【发布时间】:2016-03-12 00:29:32
【问题描述】:

想要在逗号分隔的文本文件中打印出一个矩阵,但是此代码将打印出全为零的矩阵,这不是文本文件中的矩阵。

public int[][] readFromFile() throws FileNotFoundException {
    Scanner in = new Scanner(new File("C:\\Users\\Aidan\\Documents\\NetBeansProjects\\matrix\\src\\matrix\\newfile"));
    int[][] a = new int[9][9];
    while (in.hasNext()) {
        String word = in.next();
        if (word.equals(",")) {
            continue;
        }
        System.out.println(word);
        int x = 0;
        int y = 0;
        //System.out.println(Integer.parseInt(word));
        int s = Integer.parseInt(word);
        a[x++][y++] = s;
    }
    return a;
}

【问题讨论】:

  • 我建议使用 apache commons csv library 之类的东西来做这样的事情。为什么要重新发明轮子?
  • @user1875195 是完全正确的。我见过太多适用于一个 csv 文件而无法用于下一个文件的手工构建代码。很少有应用程序严格遵守 csv 标准,因此您需要一个可以处理变化的解析器。大多数手工构建的解析器都无法处理(一,二,三)和(“一,七”,二,三),这两者都是有效的csv。
  • 为了帮助您解决问题,我们需要查看您正在导入的 csv 文件和输出(尤其是 println(word) 的输出)
  • 能否请您发布输入文件,并告诉您要实现什么目标。仅当逗号被空格包围时,您的方法才有效。很难弄清楚你对数组的目标是什么,而且你编写数组的方式看起来很奇怪。实际上,您并没有写每个元素,只是从 0,0, 1,1, 2,2, 3,3, 4,4, 5,5 对角线?
  • 为什么不加载整个文件,然后使用 String.split() 将它们分开?

标签: java arrays


【解决方案1】:

假设您的 csv 文件中有多行:

1,2,3,4,5,6,7,8,9
2,3,4,5,6,7,8,9,1
3,4,5,6,7,8,9,1,2
...

您应该能够执行以下操作:

int[][] a = new int[9][9];
Scanner in = new Scanner(new File("C:\..."));
for (int i = 0; i < 9; i++) {
    String[] line = in.nextLine().split(",");
    for (int j = 0; j < 9; j++) {
        a[i][j] = Integer.parseInt(line[j]);
    }
}

这是最低限度,并且不包括错误检查,如果您的 csv 中的一行包含少于 9 个逗号分隔的数字,程序将崩溃。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2014-12-14
    • 2012-06-13
    相关资源
    最近更新 更多