Есть ли способ избежать этого повторяющегося вызова метода? - PullRequest
0 голосов
/ 14 февраля 2019

Я использую HashMap для подсчета всех экземпляров слов в статье, я пытаюсь удалить все несловарные символы, кроме пробелов (потому что они уже удалены с помощью .split ()).Есть ли способ не повторять "pWord = pWord.replace (...);"каждый раз и вместо этого проходить и передавать различные аргументы в скобках?

pWord = pWord.replace('"', '\"');
pWord = pWord.replace("–", "");
pWord = pWord.replace("\"", "");
pWord = pWord.replace(".", "");
pWord = pWord.replace("-", "");

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Один из способов добиться этого - использовать replaceAll с регулярным выражением.Вот пример кода с регулярным выражением для символов, которые вы заменяете в своем коде:

String pWord = "-asdf\\\\adf.asdf\"";
System.out.println(pWord.replaceAll("[(\")(\\\\).-]", ""));

Вывод:

asdfadfasdf

Кроме того, обратите внимание , что

String # replaceAll () интерпретирует аргумент как регулярное выражение.\ Является escape-символом как в строке, так и в регулярном выражении.Вам необходимо дважды убрать его для регулярных выражений

PS Полезный ресурс для проверки ваших регулярных выражений: https://regex101.com/

0 голосов
/ 14 февраля 2019

Другой способ, если вы хотите удалить ALL NON-LETTER символов, - переписать строку, игнорируя все остальные символы.

String s = "hello world _!@#";
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
    if (Character.isDigit(c) || Character.isLetter(c) || Character.isWhitespace(c))
        sb.append(c);
}
s = sb.toString();
System.out.println(s);
...