目前,此亵渎过滤器会找到darn
和golly
但不会Darn
或Golly
或DARN
或GOLLY
。
List<String> bannedWords = Arrays.asList("darn", "golly", "gosh");
StringBuilder re = new StringBuilder();
for (String bannedWord : bannedWords)
{
if (re.length() > 0)
re.append("|");
String quotedWord = Pattern.quote(bannedWord);
re.append(quotedWord);
}
inputString = inputString.replaceAll(re.toString(), "[No cursing please!]");
如何将其修改为不区分大小写?
答案 0 :(得分:3)
使用(?i)
启动表达式。
即,将re.toString()
更改为"(?i)" + re.toString()
。
(?idmsux-idmsux)
没什么,但是开启了匹配标志i d m s u x
- 关闭
其中i
是CASE_INSENSITIVE
标志。
答案 1 :(得分:3)
您需要设置CASE_INSENSITIVE
标记,或者只需将(?i)
添加到正则表达式的开头。
StringBuilder re = new StringBuilder("(?i)");
您还需要将条件更改为
if (re.length() > 4)
通过@ ratchetFreak的答案设置标志可能是最好的。它允许您的条件保持不变(这更直观),并让您清楚地了解代码中发生了什么。
有关详细信息,请参阅this question,特别是this answer,其中提供了在java中使用正则表达式的一些不错的解释。
答案 2 :(得分:1)
使用预编译的java.util.regex.Pattern
Pattern p = Pattern.compile(re.toString(),Pattern.CASE_INSENSITIVE);//do this only once
inputString = p.matcher(inputString).replaceAll("[No cursing please!]");