Страницы

Поиск по вопросам

вторник, 22 января 2019 г.

Как разбить строку на слова, чтобы в словах остались только буквенные и цифровые символы?

К примеру есть вот такая строка: String text = "The urn was then carried for several rounds around the cremation site, for the last leg of the procession."
Мне надо разбить её на слова, удалив при этом все знаки препинания и спецсимволы, а слова поместить в список.
ArrayList words = new ArrayList<>(); String word = text.replaceAll(",", " "); - тут, насколько я понимаю, надо делать регулярное выражение ? Или можно без него удалить знаки препинания и спецсимволы ?


Ответ

Можно разбить строку с помощью регулярного выражения.
String text = "The urn was then carried for several rounds around the cremation site, for the last leg of the procession."; String[] results = text.split("\\W+"); System.out.println(Arrays.toString(results)); // [The, urn, was, then, carried, for, several, rounds, around, the, cremation, site, for, the, last, leg, of, the, procession]
Чтобы \\W+ "понимал" Юникод, добавьте (?U) перед регулярным выражением (чтобы не удалялись русские и другие буквы), "(?U)\\W+"
Обратите внимание, что \\W+ не найдёт знака подчёркивания _ и если его надо найти, используйте "[\\W_]+"
См. демо онлайн
Можно найти все буквы Юникода (\p{L}) и ASCII-цифры ([0-9]) с помощью
String text = "The urn was then carried for several rounds around the cremation site, for the last leg of the procession. И ещё..."; Pattern pattern = Pattern.compile("[\\p{L}0-9]+"); Matcher matcher = pattern.matcher(text); List result = new ArrayList<>(); while (matcher.find()){ result.add(matcher.group(0)); } System.out.println(result); // [The, urn, was, then, carried, for, several, rounds, around, the, cremation, site, for, the, last, leg, of, the, procession, И, ещё]
Ещё одно Java-демо

Комментариев нет:

Отправить комментарий