Использование BufferedReader в java для чтения строки целых чисел перед чтением строк строк из текстового файла

У меня есть текстовый файл, который выглядит так:

5 10
ahijkrewed
llpuvesoru
irtxmnpcsd
kuivoqrsab
eneertlqzr
tree
alike
cow
dud
able
dew

Первое число в первой строке, 5, — это количество строк в головоломке с поиском слов, а 10 — это количество столбцов в головоломке. Следующие пять строк — головоломка. Мне нужно знать, как поместить 5 в целое число строк и 10 в целое число столбцов. Затем мне нужно перейти к следующей строке, чтобы прочитать строки. Используя модифицированный файл только с 5 строками для головоломки, я понял, как поместить часть головоломки в массив 2d, но мне нужен способ установить размер этого массива из первой строки соответствующего текстового файла.

Я написал это:

import java.io.*;

class SearchDriver {
public static void processFile(String filename) throws FileNotFoundException, IOException {

    FileReader fileReader = new FileReader(filename);
    BufferedReader in = new BufferedReader(fileReader);

    // declare size of array needed
    //
    // int rows and columns need to be read in from first
    // line of the file which will look like: X Y
    //
    // so i need rows = X and columns = Y
    int rows = 5;
    int columns = 10;
    String[][] s = new String[rows][columns];

    // start to loop through the file
    //
    // this will need to start at the second line of the file
    for(int i = 0; i < rows; i++) {
        s[i] = in.readLine().split("(?!^)");
    }

    // print out the 2d array to make sure i know what i'm doing
    for(int i=0;i<rows;i++) {
        for(int j=0;j<columns;j++) {
            System.out.println("(i,j) " + "(" + i + "," + j + ")");
            System.out.println(s[i][j]);
        }
    }
}
public static void main(String[] args)
    throws FileNotFoundException, IOException {
        processFile("puzzle.txt");
        }
    }

Будем признательны за любую помощь, включая любые веб-сайты с примерами и обширной документацией по чтению файлов с использованием BufferedReader.


person Van    schedule 15.09.2013    source источник
comment
Вы можете использовать Scanner методы hasNextInt и nextInt (для целых чисел) и hasNext и next для строк.   -  person PM 77-1    schedule 15.09.2013


Ответы (2)


Это похоже на домашнее задание, поэтому я не буду давать вам полное решение, но вот подсказка, с которой вы можете начать:

String firstLine = in.readLine();
//You now have the two integers in firstLine, and you know that they're 
//separated by a space. How can you extract them into int rows and int columns?
String[][] s = new String[rows][columns];
person musical_coder    schedule 15.09.2013
comment
Спасибо, это, вероятно, несколько дополнительных шагов, но я сделал это так. String[] firstline = in.readLine().split(" "); int rows = Integer.parseInt(firstline[0]); int columns = Integer.parseInt(firstline[1]); - person Van; 16.09.2013

Я бы предложил более простое решение: используйте java.util. Сканер вместо этого. В Интернете есть много примеров использования (и в ссылке, которую я предоставил), но это может помочь вам начать:

Scanner sc = new Scanner(new File(filename));
int rows = sc.nextInt();
int cols = sc.nextInt();
sc.nextLine();  // move past the newline
for(int i = 0; i < rows; i++) {
  String line = sc.nextLine();
  // etc...
}
person perimosocordiae    schedule 15.09.2013
comment
Спасибо, я проверю это в конце концов. Это определенно выглядит намного проще. - person Van; 16.09.2013
comment
Это сократило мой метод processFile вдвое. Спасибо! - person Van; 17.09.2013