Причина, по которой ваш код не работает, заключается в том, что у входного файла также есть новая строка с окончанием, которая также должна рассматриваться как разделитель.
Вместо использования только "=" в качестве разделителя, сделайте что-нибудькак это:
Scanner sc = new Scanner(new File("Phase_1.txt")).useDelimiter("[=\\r\\n]+");
Объяснение:
useDelimiter () также принимает регулярное выражение.[=\\r\\n]+
является регулярным выражением.
+
: знак плюс указывает на одно или несколько вхождений предыдущего элемента.Например, ab + c соответствует «abc», «abbc», «abbbc» и т. Д., Но не «ac».
[]
: выражение в скобках.Соответствует одному символу, заключенному в квадратные скобки.Например, [abc] соответствует «a», «b» или «c».
Источник: https://en.wikipedia.org/wiki/Regular_expression
Окончания строк фактически зависят от ОС.Для Windows это \r\n
.Для Unix это \n
.
Два \\
добавлены для экранирования \
.Подробнее о последовательностях побега: https://docs.oracle.com/javase/tutorial/java/data/characters.html.
Итак, под [=\\r\\n]+
мы подразумеваем, что если =
, или \r
, или \n
появляется более одного раза, обрабатывайте его как один разделитель.Итак, следующее будет рассматриваться как один разделитель:
=, \r, \n, =\r, =\r\r, =\r\n, ==, \r\n, and so on.
На самом деле, в вашем случае, файл выглядит так:
muffin=bobby=25.0=pug\r\ntiny=eth=22.0=poodle\r\nrex=david=40.0=ab
При упоминании вышеупомянутого регулярного выражения разделителя, Сканер будет рассматривать следующее как разделитель.
маффин =
Бобби =
25.0 =
мопс \r\n
крошечный =
eth =
22.0=
Пудель \r\n
Рекс =
Дэвид =
40.0 =
ab
Надеюсь, это поможет немного.