java读取txt文件(2D)成几个2D数组

时间:2018-05-05 20:18:14

标签: java arrays file size

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

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

2 个答案:

答案 0 :(得分:0)

  • 扫描程序提供API以检查输入流中是否有其他项目(甚至是特定类型的项目)
  • hasNext *系列API和下一个*系列API是您所需要的。
  • 将它与循环一起使用。
  • 使用ArrayList,以便您不需要事先知道尺寸。

  • 如果列数固定,您可以读取整行,并按空格分割。结果数组的长度将是您的列大小。但是不能预先获得行大小。因此,首选列表集合。

https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Scanner.html

答案 1 :(得分:0)

这是一个概念。我不会为你做功课。

  1. 使用文件的所有行填充ArrayList字符串类型 (如果有空白行,则除外)。务必关闭文件读取 完成文件后。 List<String> list = new ArrayList<>();。您需要使用List.add()方法将每个必需的文件数据行添加到列表中。
  2. ArrayList size list.size())现在告诉你多长时间( 长度)您要创建的每个数组都是。宣布你的每一个 列数组(即: hw1Array [] hw5Array [] )为 double 数据 类型。看看你的代码,无论如何这都是你的意图。确定 立即初始化每个数组的长度:double[] hw1Array = new double[list.size()];
  3. 由于要忽略名称列,我们不会担心它。
  4. 现在,创建一个 for 循环,以便遍历 列表 你 通过读取数据文件创建。使用 i 作为迭代变量。 for (int i = 0; i < list.size(); i++) { }
  5. for 循环中声明一个字符串数组并使用 针对每个List元素的String.split()方法:String[] lineValues = list.get(i).split("\\s+");"\\s+" split()方法中的Regular Expression,这意味着将字符串拆分为包含任意数量空格的分隔符。
  6. 现在只需填充5个柱状阵列即可。再次 在 for 循环中,使用来自的数据填充每个柱状数组 lineValues [] String在前一代码行中创建的数组,并使用Double.parseDouble()方法在流程中转换为double数据类型,例如: 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

  7. 现在已创建数组。

    快速显示阵列:

    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));