У меня есть текстовый файл, который нужно прочитать в программе. Формат содержимого файла такой:
1, Q, 0
1, S, 4
1, E, 3
1, W, 2
1, N, 5
2, Q, 0
2, N, 5
3, Q, 0
Код ниже не работает:
sc = new Scanner(new FileReader("dirFile.txt"));
while(sc.hasNextLine()){
sc.useDelimiter(", ");
int loc = sc.nextInt();
sc.skip(sc.delimiter());
String description = sc.next();
sc.skip(sc.delimiter());
int locID = sc.nextInt(); // Line 70
sc.nextLine(); // Line 71
locations.get(loc).addExits(description, locID);
}
Но если я изменю строку 70 и строку 71 на приведенный ниже код, это сработает:
String temp = sc.nextLine();
int locID = Integer.parseInt(temp);
Я предполагаю, что проблема первого кода в том, что сканер читает целое число. Если я позволю сканеру прочитать его как String, а затем проанализировать его на int, все будет в порядке. Но я не уверен, почему не работает первый код. Для меня это не имеет смысла. Кто-нибудь может сказать мне, что не так с первым кодом?




Ваш текст состоит из , и разделителя новой строки \n. Вы должны их совместить.
Более того, этот параметр должен быть установлен вне цикла while:
sc = new Scanner(new FileReader("dirFile.txt"));
sc.useDelimiter(", |\\n");
while() {
///
}
Scannerвозвращает токены, разделенные разделителем, поэтому вам не нужно пропускать разделитель. Однако вы не должны использоватьScannerдля этого (не подходящий инструмент для этой работы, и он медленный). ИспользуйтеBufferedReaderдля чтения строк иsplit(", ")для каждой строки.