如何将文件中的字符转换为Java中的2D数组?

时间:2016-02-05 04:49:56

标签: java arrays

所以我有一个看起来像这样的文件:

+-+-+-+ ("/n")
|S|   | ("/n")
+ + + + ("/n")
|   |E| ("/n")
+-+-+-+ ("/n")

/n是文件中的新行

我希望这里的每个字符都是5x7数组中的一个条目。我不知道该怎么做,这就是我所尝试的(还有很多其他的东西。输入是文件):

public static void main(String[] args) throws FileNotFoundException {

  Scanner input = new Scanner(new File("maze0.txt"));

  char maze[][] = new char[5][7];
  int charCount = 0;
     for (int row = 0; row < finalHeight; row++) {
        for (int col = 0; col < finalWidth; col++) {
           while (input.hasNextLine()){
               String line = input.nextLine();
              if ((row < finalHeight - 1 || col < finalWidth) && charCount < line.length()) {
                     maze[row][col] = line.charAt(charCount);
                     charCount += 1;
                     System.out.print(maze[row][col]);

但这打印出+ S + +,这是不对的。我是一个全新的初学者程序员,并且很难有这个,感谢您提供的任何帮助。

我修好了!!这就是我所做的:

  Scanner input = new Scanner(new File("maze0.txt"));




  char maze[][] = new char[5][7];
  input.nextLine();
     for (int row = 0; row < 5; row++) {
        String fileLine = input.nextLine();
        for (int col = 0; col < 7; col++) {
              char nextChar = fileLine.charAt(col);
              maze[row][col] = nextChar;
              System.out.print(maze[row][col]);

6 个答案:

答案 0 :(得分:0)

使用.toCharArray()将行转换为字符数组,这将为您提供所有字符的数组。然后将它们送入您的阵列。

它看起来像......

// everytime we come to a new row, read a line from the file, convert it into letters then proceed on feeding them into columns.
for (int row = 0; row < finalHeight; row++) 
{
      String line = input.nextLine();
      Char[] chars = line.toCharArray();
      if(!input.hasNextLine())
            break;            // if there is no more lines to read, break the loop.
      for (int col = 0, i = 0; (col < finalWidth && i < chars.length); col++,i++) 
      {
        maze[row][col] = chars[i];
        System.out.print(maze[row][col]);
      }
}

答案 1 :(得分:0)

实际上,虽然屏幕可能显示+ S + +,但您的数组中只有一个值 - 迷宫[0] [0](值为'+')。你的while循环在for循环增加之前读取整个文件。对于它读取的每一行,它设置maze[row][column] = line.charAt(charCount); - 但rowcolumn永远不会增加,因为,还有另一个行阅读。所以它读取另一行并覆盖maze[0][0]为line.charAt(1)(因为你增加了charCount)。这个角色就是空间。然后它循环回来,因为还有另一行要读取,并将第3个字符放在maze[0][0]。等等等等。当它读取整个文件时,它会逐步执行for循环,但while (input.hasNextLine())不会执行,因为它已经读取了整个文件。

答案 2 :(得分:0)

你只需要两个循环,为什么你要运行3个循环?

Scanner sc = new Scanner(new File("maze.txt"));
String line = null;
for(int i = 0; i< 5;i++)
{
      line = sc.readLine()
      for(int j = 0; j < 7; j++)
      {
          maze[i][j] = line.charAt(j);
      }
}

此代码段应读取文件并将其存储在矩阵中。

由于您正在读取内循环中的线,因此您正在打印对角线。

答案 3 :(得分:0)

这是一种简单而有效的方法。

public static void main(String[] args) throws FileNotFoundException {
    Scanner input = new Scanner(new File("maze0.txt"));

    char maze[][] = new char[5][7];
    for (int i = 0; i < maze.length; i++) {
        //Get each line and convert to character array.
        maze[i] = input.nextLine().toCharArray();
    }
}

答案 4 :(得分:0)

您可以从文件中读取每一行并将其转换为char数组。

public static void main(String[] args) throws IOException {
    Scanner scan = new Scanner(new File("maze0.txt")); 
    String b;
    char maze[][] = new char[5][7];
    for (int row = 0; row < 5; row++) {
        while ( scan.hasNextLine() ){
            b = scan.nextLine();
            maze[row] = b.toCharArray();
            System.out.println(maze[row]);
        }
    }    
    scan.close();
}

答案 5 :(得分:0)

import java.io.*;
import java.util.*;

public class B 
{
    public static void main(String...aaadf)throws FileNotFoundException
    {

        Scanner sc = new Scanner(new File("D://maze.txt"));
        char maze[][] = new char[5][7];
        String line = null;
        for(int i = 0; i< 5;i++)
        {
              line = sc.nextLine();
              for(int j = 0; j < 7; j++)
              {
                  maze[i][j] = line.charAt(j);
              }
        }
        for(int i = 0; i< 5;i++)
        {

              for(int j = 0; j < 7; j++)
              {
                  System.out.print(maze[i][j]);
              }
              System.out.println();
        }
    }
}