读取文件并将其转换为java中的二维数组

时间:2017-10-28 22:05:06

标签: java arrays multidimensional-array

我需要使用文本文件制作一个20x45阵列。例如,使用3 * 5阵列:

文件输入:
四分和七年前

数组(使用_表示空格):
F o u r _
s c o r e
_ a n d _

我会透明地说我对Java很陌生并且我已经尝试了一段时间并且不知道从哪里开始。到目前为止,我已经得到了这段代码:

    // Create file instance.
    java.io.File file = new java.io.File("array.txt"); 

    int totalRow = 20;
    int totalColumn = 45;
    char[][] myArray = new char[totalRow][totalColumn];
    Scanner scanner = new Scanner(file);

    for (int row = 0; scanner.hasNextLine() && row < totalRow; row++) {    
        char[] chars = scanner.nextLine().toCharArray();
        for (int i = 0; i < totalColumn && i < chars.length; i++) {
            myArray[row][i] = chars[i];
            System.out.println(myArray[row][i]);
        }
        //System.out.println("");
    }

我尝试了很多不同的迭代,而且我被卡住了 提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题是第一次运行scanner.nextLine().toCharArray();时,它会读取整个文本,因为该文件只包含一行。但是,在该循环中,您的代码只处理2d数组的第一行。

for (int row = 0; scanner.hasNextLine() && row < totalRow; row++) {    
    char[] chars = scanner.nextLine().toCharArray(); //Notice this reads the entire text the first loop when row=0
    for (int i = 0; i < totalColumn && i < chars.length; i++) {
        //This loop fills the first row of the array when row=0
        myArray[row][i] = chars[i];
        System.out.println(myArray[row][i]);
    }
    //End of loop, the next time scanner.hasNextLine() returns false and loop terminates
}

要解决此问题,您应该在循环外阅读chars(只读一次)。然后使用单个索引迭代字符,同时迭代2d数组。

char[] chars = scanner.nextLine().toCharArray();
int i = 0;

for (int row = 0; row < totalRow & i<chars.length; row++) {    
   for (int col = 0; col < totalColumn & i<char.length; col++) {
       myArray[row][col] = chars[i];
       i++;
   }
}