Есть ли регулярное выражение для метода String.replaceAll, который сохраняет только буквы и пробелы - PullRequest
0 голосов
/ 07 января 2020

Я создал программу, которая считает частоту слова в очень длинной строке. Моя проблема в том, что программа считает, например, «* it» (рассмотрим * кавычку) и «it» как разные слова и, следовательно, помещает их в разные категории.

Я попытался заменить все известные мне знаки препинания следующим кодом:

text = text.replace("\n", " ");
text = text.replaceAll("\\p{Punct}", " ");
text = text.replace("\"", "");
text = text.replace("–", "");
text = text.replace("\t", "");

К сожалению, код не сработал, и я думаю, что это потому, что много разные кавычки в Юникоде, между которыми я не вижу разницы, есть ли способ удалить все символы Юникода, кроме букв и пробелов, с помощью метода String.replaceAll или мне нужно создать CharArray и продолжить с него?

Большое спасибо, любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 07 января 2020

Это удалит все не-буквенные / ди git символы и квадратные sh пробелы, поэтому вы не получите несколько последовательных пробелов:

text = text.replaceAll("[^\\p{L}\\d]+", " ");
1 голос
/ 07 января 2020

Я думаю, что это может сделать это

text = text.replaceAll("[^a-zA-Z0-9 ]", "");

, который удалит все символы, которые не являются ни alphanumeri c, ни специальными символами.

РЕДАКТИРОВАТЬ: -

По предложению @ npinti

text = text.replaceAll("[^\\p{L}0-9 ]", "");
0 голосов
/ 07 января 2020

Это удалит все не буквы и пробелы.

text.replaceAll("[^\\sa-zA-Z]", "");

Легенда:

  • ^ - исключить замену данных символов
  • \\s - все пробелы (\ n, \ t, '')
  • a-zA-Z - все буквы

Пример:

String in="12ASxA  sdr5%";
System.out.println(in.replaceAll("[^\\sa-zA-Z]", "")); // ASxA  sdr
...