Ваш входной разделитель - пробел. Когда ваш файл разделен, он разделяет все фактические пробелы как разделители и обрезает их. Но символ перевода строки (в зависимости от используемой ОС / кодировки) интерпретируется как то, что он есть, а не как пробел.
Вы можете записать все элементы в одну строку и проанализировать файл как oneliner, или, что еще лучше, вы можете сначала разбить файл на строки (разделитель "\ n" или "\ r" или любой другой), а затем разделить его пробелами. Тем не менее, мое goto было бы совпадением регулярных выражений, потому что те делают хорошую работу в этом отношении.
Pattern pattern = Pattern.compile("[^\\h\\v]+");
Matcher matcher = pattern.matcher(input); // cut the matrix size before you do this!
int x = 0;
int y = 0;
while (matcher.find()) {
String match = matcher.group(0);
maze[x][y] = match;
++y;
if (y == size) {
++x;
y = 0;
}
}
Шаблон [^\\v\\h]+
захватывает все, что не является пробелом или разрывом строки (не вертикальным или горизонтальным пробелом). Другими словами, он разбивает вашу строку на то, что вы хотите, чтобы она была разбита. Однако сопоставление регулярных выражений работает немного иначе, чем split. Это позволяет вам интерпретировать каждое совпадение индивидуально, даже с подстроками в вашем сопоставлении, если вы определяете их в выражении. https://www.vogella.com/tutorials/JavaRegularExpressions/article.html