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

How can I read multiple grid from text file to 2D array in 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);
        }
    }
}