#java #java.util.scanner #delimiter
#java #java.util.scanner #разделитель
Вопрос:
Я пишу программу, которая сканирует текстовые файлы, а затем записывает каждое слово в хэш-карту.
Класс Scanner имеет стандартный разделитель в виде пробела. Но в итоге я сохранил свои слова с прикрепленными к ним знаками препинания. Я хочу, чтобы сканер распознавал точки, запятые и другие типы распространенных знаков препинания как знак остановки токена. Вот что я попытался:
Scanner line_scanner = new Scanner(line).useDelimiter("[.,:;()?!" t] ~\s");
Сканер в основном проигнорировал все пробелы, хотя у меня есть ‘\s’ как часть выражения. Извините, но я почти ничего не понимаю в регулярных выражениях.
Ответ №1:
Scanner line_scanner = new Scanner(line).useDelimiter("[.,:;()?!"\s] ");
Ответ №2:
Возможно, вам не нужны буквы в юникоде:
useDelimiter("[^\p{L}\p{M}] ");
([^…] не является, заглавная буква p означает категорию Юникода, L — буквы, M — диакритические объединяющие знаки (акценты).)