我有一个文本文件,其中包含具有二维数组格式的字符序列,我想将这些字符加载到二维数组中

I have a text file that contains a sequence of characters that has the format of a 2d array and I want to load those characters into a 2d array

这是文本文件的样子:

15、10
E E V I S S I M D N O F O R P
V S S P E V O Y A G E S U A P
N I S B E R E V E R T U E U X
O O R A C J I N F I C O N R D
I N D G O G O U P A N H I U T
S E E U U U R U D B A N A N E
A G C E T L L U R E R T M N G
CART E E E P E N S I O N D
C R E T R U E H C O A I D E U
O O T E V I V A C E C L R E B

第一行是字符网格的尺寸。
我遇到的问题是它没有读取整行网格。

这是我想出的:

File myFile = new File(file);
    Scanner myReader = null;
    try {
        myReader = new Scanner(myFile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    if (myFile.exists()) {

        String firstLine = myReader.nextLine();

        // cols
        int cols = Integer.parseInt(firstLine.charAt(0) + "" + firstLine.charAt(1));
        // rows
        int rows = Integer.parseInt(firstLine.charAt(4) + "" + firstLine.charAt(5));

        tabLettres = new char[rows][cols];
        char[] lineArray = null;
        String line = "";
        
        for (int i = 0; i < tabLettres.length; i++) {
            line = myReader.nextLine();
            lineArray = line.toCharArray();
            for (int j = 0; j < tabLettres[i].length; j++) {
                tabLettres[i][j] = lineArray[j];
            }
        }

我得到的是:
E E V I S S I M
V S S P E V O Y
N I S B E R E V
O O R A C J I N
I N D G O G O U
S E E U U U R U
A G C E T L L U
CART E E E P
C R E T R U E H
O O T E V I V A

如您所见,直到列的全长才开始阅读。 这也是我用来打印数组的方法

public void loadArray() {
    for (int i = 0; i < tabLettres.length; i++) {
        for (int j = 0; j < tabLettres[i].length; j++) {
            System.out.print(tabLettres[i][j] + " ");
        }
        System.out.println();
    }
}

您正在此处的空白处阅读。一旦你读完你的行,运行 line.replaceAll(" ", "") 就可以去掉这些空格。这样,您将只会读入相关字符。希望这对您有所帮助!

您不需要嵌套循环来执行此操作。

  • 首先,忘记列,您只需要行来分配数组以保存读入的所有行。
  • 读入维度并使用拆分捕获行。
  • 为那么多行分配字符数组。
  • 现在逐行读取文件,用空字符串替换空格,然后调用 toCharArray() 并使用该数组填充二维数组的列。
File file = new File("f:/griddata.txt");
try (Scanner scan = new Scanner(file)) {
    String[] dimensions = scan.nextLine().split("\s*,\s*");
    int rows = Integer.parseInt(dimensions[1]);
    char[][] tabLettres = new char[rows][];
    
    int row = 0;
    while (scan.hasNextLine()) {
        tabLettres[row++] = scan.nextLine().replace(" ", "")
                .toCharArray();
    }
    // print results
    for (char[] char_row : tabLettres ) {
        System.out.println(Arrays.toString(char_row));
    }
} catch (FileNotFoundException fne) {
    fne.printStackTrace();
}

打印

[E, E, V, I, S, S, I, M, D, N, O, F, O, R, P]
[V, S, S, P, E, V, O, Y, A, G, E, S, U, A, P]
[N, I, S, B, E, R, E, V, E, R, T, U, E, U, X]
[O, O, R, A, C, J, I, N, F, I, C, O, N, R, D]
[I, N, D, G, O, G, O, U, P, A, N, H, I, U, T]
[S, E, E, U, U, U, R, U, D, B, A, N, A, N, E]
[A, G, C, E, T, L, L, U, R, E, R, T, M, N, G]
[C, A, R, T, E, E, E, P, E, N, S, I, O, N, D]
[C, R, E, T, R, U, E, H, C, O, A, I, D, E, U]
[O, O, T, E, V, I, V, A, C, E, C, L, R, E, B]