java - 如何在不知道尺寸的情况下使用从文件中获取的数据加载 Java 中的 N_by_M 矩阵?

标签 java file multidimensional-array

有一个用 1 和 0 填充的文本文件。我正在尝试使用从该文件中获取的所有数据在 Java 中加载一个 N_by_M 矩阵。我不知道矩阵的尺寸提前,因为它取决于文件有多少数据。保证的是文件中的每一行都包含相同数量的字符。 我的代码片段有效,但我对此感到尴尬,因为:

  1. 我使用 BufferedReader 实例一次只是为了计算行数并关闭它并创建另一个实例只是因为我不知道如何倒带!
  2. 我正在使用第二个实例读取实际数据并加载到矩阵。
  3. 在一个循环中,我找到了列的大小。我只需要找到它一次。然而,它处于循环中,一次又一次地找到它是多余的。

请告诉我如何通过仅使用一次 BufferedReader 以及如何仅一次查找该列来改进它。

    char[][] areas;
    String path = "C:\\test\\data.txt";
    BufferedReader br = new BufferedReader(new FileReader(path));
    String s;
    int numRows=0, numColumns=0;
    while((s = br.readLine()) != null) {
        if(numColumns==0)
            numColumns=s.length();
        numRows++;
    }
    br.close();
    areas = new char[numRows][];
    br = new BufferedReader(new FileReader(path));
    int i=0;
    while((s = br.readLine()) != null) {
        areas[i] = s.toCharArray();
        i++;
    }
    br.close();

最佳答案

强烈建议您从List<String> lines = Files.readAllLines(Paths.get(path));开始因为你想把所有的行都读成 char[] s,你可以做类似的事情

List<String> lines = Files.readAllLines(Paths.get(path));
char[][] areas = new char[lines.size()][];
for (int i = 0; i < areas.length; i++) {
    areas[i] = lines.get(i).toCharArray();
}
lines.clear(); // <-- since we wanted areas...
// ...

关于java - 如何在不知道尺寸的情况下使用从文件中获取的数据加载 Java 中的 N_by_M 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34967371/

相关文章:

php - 更新和排序多维 PHP 数组

java - TreeMap 不返回所有键

java - Java SWING 程序中的事件调度线程

C++ 从文件读取到 vector

c# - 调整和初始化二维数组 C#

php - 如何对相同的数组值进行分组

java - 在启动 Ubuntu 时运行程序

java - 如何处理Java中的链接错误?

java - 使用 BufferedReader 读取多个文件(使用 String[] args)

file - 是否有任何工具或方法可以从文件(javascript)中删除空格或减小文件大小?