Как использовать разделитель для выделения слов (Java)

#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 — диакритические объединяющие знаки (акценты).)