首页 > 解决方案 > java读取txt文件(2D)成几个二维数组

问题描述

我有一个包含如下数据的文本文件:

HW1  HW2  HW3  HW4  HW5
97   64   75   100  21   John
19   68   89   49   97   Kim
28   83   48   44   91   Kathy
69   66   78   87   85   Steve
99   94   93   96   91   Stacy
35   75   65   55   45   Faith

我尝试用 读取大小BufferedReader,以便可以将它们转换为多个数组(即HW1arrHW2arr等...)。我怎样才能找到像这个 2D 文件这样的数组大小?

public static void main(String[] args) {

    Scanner reader = null;
    try {
        File f = new File("inputHW7.txt");
         reader = new Scanner(f);
    } catch(FileNotFoundException e) {
    }


    double[][] size2d = null;
    int count = 0;
    int rowCount =0;
    int colCount = 0;
    int readChar = 0;
    boolean empty = true;

    rowCount = reader.nextInt();
    for(int i=0 ; i<rowCount ; i++){
        colCount = reader.nextInt();
        size2d[i] = new double[colCount];
        System.out.print("debugs column = "+size2d[i]);
        for(int j=0 ; j<colCount ; j++){
            size2d[i][j] = reader.nextDouble();
            System.out.println("debug rows = "+ size2d[i][j]);
        }
    }
}

标签: javaarraysfilesize

解决方案


这是一个概念。我不会为你做作业。

  1. 用文件的所有行填充字符串类型的ArrayList (如果有的话,不包括空行)。完成文件后,请务必关闭文件读取。List<String> list = new ArrayList<>();. 您将需要利用List.add()方法将每个所需的文件数据行添加到列表中。
  2. ArrayList size ( list.size()) 现在告诉您 要创建的每个 Array的长度(长度)。将每个列数组(即:hw1Array[]hw5Array[])声明为精度数据类型。查看您的代码,无论如何这都是您的意图。请务必立即初始化每个数组的长度:double[] hw1Array = new double[list.size()];.
  3. 由于名称列将被忽略,我们不会担心它。
  4. 现在,创建一个for循环,以便遍历您通过读取数据文件创建的List 。使用i作为迭代变量。for (int i = 0; i < list.size(); i++) { }.
  5. for循环中声明一个字符串数组并针对每个 List 元素使用 String.split()方法String[] lineValues = list.get(i).split("\\s+");:这"\\s+"split()方法中的正则表达式,这意味着在包含任意数量空格的分隔符上拆分字符串。
  6. 现在只需填充 5 个柱状数组即可。再次在您的for循环中,使用在上一个代码行中创建的lineValues[]字符串数组中的数据填充每个列数组, 并在过程中使用Double.parseDouble()方法转换为双精度数据类型,例如: if (lineValue.length >= 1) { hw1Array[i] = Double.parseDouble(lineValue[0]); } if (lineValue.length >= 2) { hw2Array[i] = Double.parseDouble(lineValue[1]); } if (lineValue.length >= 3) { hw3Array[i] = Double.parseDouble(lineValue[2]); } if (lineValue.length >= 4) { hw4Array[i] = Double.parseDouble(lineValue[3]); } if (lineValue.length >= 5) { hw5Array[i] = Double.parseDouble(lineValue[4]); }

    我们使用if条件来确保确实有要解析的数据加倍,否则我们最终会得到NumberFormatException

您的数组现在已创建。

要快速显示您的数组:

System.out.println(Arrays.toString(hw1Array));
System.out.println(Arrays.toString(hw2Array));
System.out.println(Arrays.toString(hw3Array));
System.out.println(Arrays.toString(hw4Array));
System.out.println(Arrays.toString(hw5Array));

推荐阅读