如何在 Java 中从文本文件中读取多个网格到二维数组?

问题描述

这里是文本文件内容

5
3
*&*&*
&*&*&
*&*&*
50
5
*&&&&&&&&*&***************&**********************&
&&********&***************&&**********************
*&&**&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&*********&&***********&***************&*********
*&&&&&******&&*********&&&**************&********&

这是我目前的代码

public class Main {

    public static char[][] grid1 = new char[5][50];

    public static void readGridData (String fileName,char[][] grid) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        int columnCount = Integer.parseInt(br.readLine());
        int rowCount = Integer.parseInt(br.readLine());
        System.out.println(columnCount);
        System.out.println(rowCount);
        for (int i = 0; i < rowCount; i++) {
            String line = br.readLine();
            for (int j = 0; j < columnCount; j++) {
                grid[i][j] = line.charat(j);
            }
        }
        br.close();
    }

    /* prints the 2D array given as argument */
    public static void printGrid(char[][] grid) {
        int rowLength = grid.length;
        int columnLength = grid[0].length;
        for (int i = 0; i < rowLength; i++) {
            for (int j = 0; j < columnLength; j++) {
                System.out.print(grid[i][j]);
            }
            System.out.println();
        }
        System.out.println();
    } // End of printGrid

    public static void main(String args[]) throws IOException {
        readGridData("simple.txt",grid1);
        printGrid(grid1);
    }

}

输出只有第一个网格,即5、3,以及网格本身。如何继续阅读整个文本文件

稍后我会用数组计算 blob,那么有没有最好的方法来优化它?

我不能为此使用 ArrayList。非常感谢您的帮助!

解决方法

readGridData 方法之外声明并初始化您的缓冲区,然后向其传递一个参数。在这种情况下,您将能够继续阅读。

我什至会用 Scanner 代替:

public static char[][] readGridData(Scanner scanner) {
    int columnCount = scanner.nextInt();
    int rowCount = scanner.nextInt();
    System.out.println(columnCount);
    System.out.println(rowCount);
    char[][] grid = new char[rowCount][columnCount]
    for (int i = 0; i < rowCount; i++) {
        String line = scanner.nextLine();
        for (int j = 0; j < columnCount; j++) {
            grid[i][j] = line.charAt(j);
        }
    }
    return grid;
}

然后:

public static void main(String args[]) throws IOException {
    try (Scanner scanner = new Scanner("simple.txt")) {
        while (scanner.hasNextInt()) {
            char[][] grid = readGridData(scanner);
            printGrid(grid);
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...