如何在Java正则表达式中找到多个单词

时间:2018-06-11 01:55:20

标签: java regex

我想查看禁止词。

在我的代码中,

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();
}

如果您收到句子&#34; test is test&#34;,则表示为&#34; ****是****&#34;使用上面的代码。

但我想过滤掉至少几十到几百个字。

单词存储在DB中。(DB Type:Oralce)

那我如何检查多个单词?

1 个答案:

答案 0 :(得分:-1)

假设您使用的是Java 9,则可以使用Matcher.replaceAll替换一个语句中的单词。您还可以使用String.replaceAll将每个字符替换为&#39; *&#39;。

模式中可以包含许多替代方案。您可以使用所需的所有单词构建一个模式。

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(".", "*"));