Как я могу найти несколько слов в регулярном выражении Java - PullRequest
0 голосов
/ 11 июня 2018

Я хочу проверить запрещающие слова.

В моих кодах

public static String filterText(String sText)   {
    Pattern p = Pattern.compile("test", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(sText);
    StringBuffer buf = new StringBuffer();
    while (m.find()){
        m.appendReplacement(buf, maskWord(m.group()));
    }
    m.appendTail(buf);
    return buf.toString();
}

public static String maskWord(String str)   {
    StringBuffer buf = new StringBuffer();
    char[] ch = str.toCharArray();
    for (int i = 0; i < ch.length; i++) {
        buf.append("*");
    }
    return buf.toString();
}

Если вы получите предложение «тест - тест», оно будет выражено как «****это **** "с использованием приведенного выше кода.

Но я хочу отфильтровать от нескольких десятков до нескольких сотен слов.

Слова хранятся в БД. (БДТип: Oralce)

Так как мне проверить несколько слов?

1 Ответ

0 голосов
/ 11 июня 2018

Если вы используете Java 9, вы можете использовать Matcher.replaceAll для замены слов в одном утверждении.Вы также можете использовать String.replaceAll для замены каждого символа на '*'.

Шаблон может содержать много альтернатив.Вы можете построить шаблон со всеми необходимыми словами.

Pattern pattern = Pattern.compile("(word1|word2|word3)");
String result = pattern.matcher(input)
    .replaceAll(w -> w.group(1).replaceAll(".", "*"));

В качестве альтернативы вы можете получить список шаблонов, а затем заменить каждый по очереди:

for (Pattern pattern: patternList)
    result = pattern.matcher(result)
        .replaceAll(w -> w.group(1).replaceAll(".", "*"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...