Получение исключений при применении .useDelimiter - PullRequest
0 голосов
/ 24 декабря 2018

Снимок экрана

У меня есть несколько проблем:

  1. содержимое файла отображается не полностью, только первая строка и вторая часть.
  2. Я попытался заменить параметр в функции .useDelimeter () с "=" на ", | \ n".Я получил все содержимое файла, но исключение не потеряно.
  3. Я перешел с throwExceptions на try-catch, но результат остался прежним

Не знаюпонять, как исправить исключения.

1 Ответ

0 голосов
/ 24 декабря 2018

Причина, по которой ваш код не работает, заключается в том, что у входного файла также есть новая строка с окончанием, которая также должна рассматриваться как разделитель.

Вместо использования только "=" в качестве разделителя, сделайте что-нибудькак это:

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

Надеюсь, это поможет немного.

...