import java.util.*;
public class SensitiveWordFilter {
private TrieNode root;
private static class TrieNode {
Map<Character, TrieNode> children;
boolean isEndOfWord;
TrieNode() {
children = new HashMap<>();
isEndOfWord = false;
}
}
public SensitiveWordFilter() {
root = new TrieNode();
}
public void addSensitiveWord(String word) {
TrieNode current = root;
for (char ch : word.toCharArray()) {
current.children.putIfAbsent(ch, new TrieNode());
current = current.children.get(ch);
}
current.isEndOfWord = true;
}
public boolean containsSensitiveWord(String text) {
TrieNode current = root;
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
if (current.children.containsKey(ch)) {
current = current.children.get(ch);
if (current.isEndOfWord) {
return true;
}
} else {
return false;
}
}
return false;
}
public String filterSensitiveWords(String text, char replacement) {
StringBuilder filteredText = new StringBuilder(text);
TrieNode current = root;
int start = 0;
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
if (current.children.containsKey(ch)) {
current = current.children.get(ch);
if (current.isEndOfWord) {
for (int j = start; j <= i; j++) {
filteredText.setCharAt(j, replacement);
}
}
} else {
current = root;
start = i + 1;
}
}
return filteredText.toString();
}
public static void main(String[] args) {
SensitiveWordFilter filter = new SensitiveWordFilter();
// 添加敏感词
filter.addSensitiveWord("猪头");
filter.addSensitiveWord("傻逼");
filter.addSensitiveWord("流氓");
// 检测文本中是否包含敏感词
System.out.println(filter.containsSensitiveWord("我是猪头")); // true
System.out.println(filter.containsSensitiveWord("傻逼流氓")); // false
// 过滤敏感词
String filteredText = filter.filterSensitiveWords("你是不是傻逼我动手", '*');
System.out.println(filteredText); // 你是不是**我动手
}
}
基于ac自动机实现的敏感词过滤工具类
最新推荐文章于 2024-07-22 14:15:06 发布