Я пытаюсь отсканировать файл с полями данных, разделенными символом @ или endline, используя класс Scanner в Java. Вот пример входного файла:
Student @ Codey @ Huntting
Student @ Sarah @ Honsinger
Для правильного сканирования входного файла, который выглядит следующим образом, я попытался изменить разделитель на Java-сканере на регулярное выражение "[@\\v]"
, которое должно соответствовать либо @
, либо любому вертикальному пробелу, включая \n
и \r
согласно этой странице
Вот код, который я использую для проверки:
Scanner scanner = new Scanner(new File("data/initialize.txt"));
int tokenNum = 0;
scanner.useDelimiter("[@\\v]");
while(scanner.hasNext()) {
System.out.println("Token #" + tokenNum++ + ": " + scanner.next());
}
scanner.close();
Я ожидаю сканирования токенов:
Token #1: Student
Token #2: Codey
Token #3: Huntting
Token #4: Student
Token #5: Sarah
Token #6: Honsinger
Но фактически полученные токены:
Token #1: Student
Token #2: Codey
Token #3: Huntting
Token #4
Token #5: Student
Token #6: Sarah
Token #7: Honsinger
Token #8:
Я бы ожидал, что сканер после сканирования Huntting
переместится на новую строку после охоты и при следующем вызове input.next()
пропустит эту новую строку, но по какой-то причине сканер, кажется, захватывает там пустая строка в конце строки.
Я проверял несколько раз, и в файле нет пробелов после любой из строк. Я пробовал разные шаблоны, такие как [@[\\v]]
и [@][\\v]
, но они всегда дают данные либо с той же ошибкой пустой строки, либо вывод полностью не в порядке.