Чтение текстового файла в java при сохранении пробелов с использованием класса сканера

Я хочу прочитать этот текстовый файл и сохранить данные в 2D-массиве. Каждое пустое пространство должно быть заменено на 0, в результате чего окончательная матрица будет состоять из 0 и 1. Проблема заключается в том, что Scanner игнорировал все пробелы и помещал в матрицу только единицы.

Это текстовый/входной файл.

                                       1111
                                      111111
                                    111 111   1
         111111                    11    111  11
       1111                         111  111    111
       1  1     11111 111           1 11  11        11111
     1111      111                        11111111
       1111     11111             111     1  11 11111
     111 111       1111           111            1111
       111       1111            11111      111111
       111      11 11                11111     111
          1111    11                11111
        1111                            11111
            1111 11 11                      1111
          111     111                        1 111
           11      1111                    111111
         1111      111                    1111
         1111     111                    1111
      1111 11      1111                   1111
        1111  111111                   11111
        111                              11111
          1111                        1111

Сканер fileScanner = новый сканер(новый файл("D:\Assignment.txt")); int [][] inputMatrix= new int[200][200]; интервал i=0,j=0; в то время как (fileScanner.hasNextLine()) { String line = fileScanner.nextLine(); Сканер lineScanner = новый Сканер(строка); в то время как (lineScanner.hasNext()) { int token = Integer.parseInt(lineScanner.next()); inputMatrix[i][j]=токен; // делаем с токеном все, что нужно j++; } lineScanner.close(); я++; j=0; // здесь вы находитесь в конце строки. Делай то что должен. } fileScanner.close();


person user3678399    schedule 08.10.2014    source источник
comment
поделитесь тем, что вы пробовали, чтобы мы могли найти проблему в вашем коде.   -  person Braj    schedule 08.10.2014
comment
Дубликат: stackoverflow.com/questions /12994342/   -  person schil227    schedule 08.10.2014
comment
Как насчет readLine() вместо чтения символа за символом, а затем замены всех пробелов на 0 в этой строке?   -  person gtgaxiola    schedule 08.10.2014
comment
Файл сканераScanner = новый сканер(новый файл(D:\\Assignment.txt)); int [][] inputMatrix= new int[200][200]; интервал i=0,j=0; в то время как (fileScanner.hasNextLine()) { String line = fileScanner.nextLine(); Сканер lineScanner = новый Сканер(строка); в то время как (lineScanner.hasNext()) { int token = Integer.parseInt(lineScanner.next()); inputMatrix[i][j]=токен; // делаем с токеном все, что нужно j++; } lineScanner.close(); я++; j=0; // здесь вы находитесь в конце строки. Делай то что должен. } fileScanner.close();   -  person user3678399    schedule 08.10.2014
comment
@user3678399 user3678399 Пожалуйста, не добавляйте код в комментарий, это совершенно нечитаемо. Отредактируйте свой пост, добавьте и отформатируйте его там.   -  person tnw    schedule 08.10.2014


Ответы (2)


Прочитайте строки и преобразуйте их в 2D-массив:

List<String> lines = new ArrayList<>();
Scanner sc = new Scanner(new File("array.txt"));
while(sc.hasNextLine()) {
    lines.add(sc.nextLine());
}

// to array
int rows = lines.size();              // number of rows
int cols = 0;                         // number of columns
for(String line : lines) {
    cols = Math.max(cols, line.length());
}
int[][] array = new int[rows][cols];  // full of 0s
int i = 0;
for(String line : lines) {            // for each line, add the 1s
    char[] chars = line.toCharArray();
    for(int j = 0 ; j < chars.length ; ++j) {
        if(chars[j] == '1') {
            array[i][j] = 1;
        }
    }
    i++;
}
person Jean Logeart    schedule 08.10.2014

Scanner sc = new Scanner(file);
String input = "";
while (sc.hasNextLine()) {
    input += sc.nextLine()+"\n";
}
sc.close();
String[] array = input.split("\n");

теперь у вас есть массив строк, вы можете использовать replace(" ", "0") для каждой строки, а затем toCharArray(), чтобы создать массив символов и поместить их все в новый массив

person Dima    schedule 08.10.2014
comment
Разве hasNextLine() не возвращает логическое значение? - person gtgaxiola; 08.10.2014
comment
Тем не менее, это неправильная проверка сканера, поскольку он выдает NoSuchElementException - если строка не найдена. - person gtgaxiola; 08.10.2014