josh
josh

Reputation: 407

Java - Reading from text file using scanner into a 2D char array

I'm trying to read a text file into a 30x30 char array. Scanner does not have a nextChar method, so I'm assuming I'm going to use next() and then split that line into chars? I'm hung up on using 3 for loops to do that though, one for the String, one for rows, and one for columns.

Here is my code so far..

public static void main(String[] args) throws FileNotFoundException {
    final int cellSize = 30; // grid size
    char[][] chargrid = new char[cellSize][cellSize];
    File inputFile = new File("E:\\workspace\\Life2\\bin\\Sample input.txt");
    Scanner in = new Scanner(inputFile);

    char testchar;
    while(in.hasNext()){
    String s = in.next();
    for (int i=0; i<s.length();i++){
     testchar = s.charAt(i);

Now would I do the 2 for statements for the array row & columns and then set chargrid[i][j] = testchar for example?

Any help would be appreciated.

Upvotes: 1

Views: 3094

Answers (1)

Vossi
Vossi

Reputation: 231

as far as I saw in your comment you would like to have also an 2D array with boolean if the character is 'X' so I filled two arrays in my code - one actually with the character and one with true or false, depending of the character is 'X' or not. There are also some system.outs to better understand how it works. I am removing newline characters ('\n') when appearing (dont know if you want that or not)

public static void main(String[] args) {
    final int cellSize = 30; // grid size
    char[][] chargrid = new char[cellSize][cellSize];
    boolean[][] chargridIsX = new boolean[cellSize][cellSize];
    File inputFile = new File("input.txt");
    FileInputStream is = null;
    try {
        is = new FileInputStream(inputFile);
        int n = -1;
        int rowCount = 0;
        int colCount = 0;
        while( (n=is.read()) !=-1){
            char readChar = (char) n;
            if(readChar!='\n'){//This removes the linebreaks - dont know if you want that
                chargrid[rowCount][colCount] = readChar;
                if(readChar=='X') { // Here actually set true or false if character is 'X'
                    chargridIsX[rowCount][colCount] = true;
                    System.out.println("row "+rowCount+" col "+colCount + " = " + readChar + " " + true);
                }else {
                    chargridIsX[rowCount][colCount] = false;
                    System.out.println("row "+rowCount+" col "+colCount + " = " + readChar+ " " + false);
                }
                if(rowCount++ >= cellSize-1){
                    System.out.println("new col");
                    rowCount = 0;
                    if(colCount++ >= cellSize-1){
                        //ARRAY IS FULL
                        System.out.println("full");
                        break;
                    }
                }
            }
        }

    } catch (FileNotFoundException e) {
        //could not get Inputstream from file
        e.printStackTrace();
    } catch (IOException e) {
        // problem with the inputstream while reading
        e.printStackTrace();
    }

btw. I am reading character for character from an inputstream instead of using scanner, hope that is okay - otherwise let me know

For what ever this might be good

Upvotes: 0

Related Questions