Как делают Вас, устанавливает разделитель для сканера к также; или новая строка?
Я попробовал: Scanner.useDelimiter(Pattern.compile("(\n)|;"));
Но это не работает.
Как правило, в шаблонах нужно удвоить \
.
Итак, попробуйте
Scanner.useDelimiter(Pattern.compile("(\\n)|;"));`
или
Scanner.useDelimiter(Pattern.compile("[\\n;]"));`
Edit: Если \r\n
, попробуйте:
Scanner.useDelimiter(Pattern.compile("[\\r\\n;]+"));
, что соответствует одному или нескольким из \r
, \n
и ;
.
Примечание: Я не пробовал эти.
.Как вы обнаружили, вам нужно искать DOS/сетевой стиль \r\n
(CRLF) разделители строк вместо Unix-стиля \n
(только LF). Но что, если текст содержит оба? Такое часто случается; на самом деле, когда я вижу источник именно этой страницы, я вижу оба варианта.
Нужно входить в привычку искать оба типа разделителей, а также старый стиль Mac \r
(только CR). Вот один способ сделать это:
\r?\n|\r
Вставляя это в свой пример кода, вы получаете:
scanner.useDelimiter(";|\r?\n|\r");
Это предполагает, что вы хотите соответствовать ровно одной новой строке или точке с запятой за раз. Если вы хотите получить совпадение с одной или более , вы можете сделать это вместо:
scanner.useDelimiter("[;\r\n]+");
Обратите внимание, как я передал в регексе строку вместо Pattern; все регексы кэшируются автоматически, так что предварительная компиляция регекса не даст вам никакого прироста производительности.
Глядя на комментарий OP, похоже, что проблема была в другом окончании строки (\ r \ n или CRLF).
Вот мой ответ, который будет обрабатывать несколько точек с запятой и окончания строк в любом формате (может или не может быть желательным)
Scanner.useDelimiter(Pattern.compile("([\n;]|(\r\n))+"));
например. входной файл, который выглядит так:
1
2;3;;4
5
приведет к 1,2,3,4,5
Я пробовал обычные \ n и \\ n - оба работали в моем случае, хотя я согласен, если вам нужен нормальный обратная косая черта, которую вы хотели бы удвоить, так как это escape-символ. Так уж получилось, что в этом случае "\ n" становится желаемым символом с дополнительным '\' или без него