java如何屏蔽敏感词
使用正则表达式过滤敏感词
通过正则表达式匹配敏感词并进行替换或拦截。将敏感词存储为模式,利用String.replaceAll()方法替换为星号或其他符号。
String text = "包含敏感词的文本";
String sensitiveWords = "敏感词1|敏感词2|敏感词3"; // 用|分隔多个敏感词
String filteredText = text.replaceAll(sensitiveWords, "*");
System.out.println(filteredText);
基于Trie树的高效匹配
构建Trie树存储敏感词库,实现高效的多模式匹配。适合大规模敏感词过滤场景。
class TrieNode {
Map<Character, TrieNode> children = new HashMap<>();
boolean isEnd;
}
public class SensitiveFilter {
private TrieNode root = new TrieNode();
public void addWord(String word) {
TrieNode node = root;
for (char c : word.toCharArray()) {
node.children.putIfAbsent(c, new TrieNode());
node = node.children.get(c);
}
node.isEnd = true;
}
public String filter(String text) {
StringBuilder result = new StringBuilder();
int i = 0;
while (i < text.length()) {
TrieNode node = root;
int j = i;
while (j < text.length() && node.children.containsKey(text.charAt(j))) {
node = node.children.get(text.charAt(j));
j++;
if (node.isEnd) {
result.append("*");
i = j;
break;
}
}
if (i < text.length()) {
result.append(text.charAt(i));
i++;
}
}
return result.toString();
}
}
使用第三方库(如Hutool)
Hutool等工具库提供现成的敏感词过滤工具,简化开发流程。
// 引入Hutool依赖后使用
WordTree wordTree = new WordTree();
wordTree.addWords("敏感词1", "敏感词2");
String text = "测试敏感词1过滤";
List<String> matchAll = wordTree.matchAll(text);
matchAll.forEach(word -> text = text.replace(word, "*"));
结合数据库动态加载
将敏感词存储在数据库或文件中,支持动态更新。程序启动时加载词库,定期刷新缓存。

// 伪代码示例:从数据库加载敏感词
List<String> words = jdbcTemplate.queryForList("SELECT word FROM sensitive_words", String.class);
TrieTree trie = new TrieTree();
words.forEach(trie::addWord);
注意事项
- 性能优化:对于高频调用场景,建议使用Trie树或AC自动机算法。
- 大小写处理:过滤前统一转为小写(或大写)以避免绕过。
- 特殊字符:需处理空格、符号等干扰项(如
敏*感*词)。 - 动态更新:通过定时任务或监听机制更新词库。


