public class DFAFilter {
private Set<String> sensitiveWords;
private int maxLength;
public DFAFilter() {
sensitiveWords = new HashSet<>();
maxLength = 0;
}
public static void main(String[] args) {
DFAFilter dfaFilter = new DFAFilter();
// xx表示违禁词
dfaFilter.addSensitiveWord("xx");
dfaFilter.addSensitiveWord("xx");
String text = "我是好人,从来不买卖xx";
System.out.println(dfaFilter.containsSensitiveWord(text));
System.out.println(dfaFilter.filterSensitiveWord(text, '*'));
}
public void addSensitiveWord(String word) {
sensitiveWords.add(word);
maxLength = Math.max(maxLength, word.length());
}
public boolean containsSensitiveWord(String text) {
StringBuilder sb = new StringBuilder();
int n = text.length();
for (int i = 0; i < n; i++) {
for (int j = i + 1; j <= i + maxLength && j <= n; j++) {
String subStr = text.substring(i, j);
if (sensitiveWords.contains(subStr)) {
sb.append(subStr);
System.out.println(sb);
return true;
}
}
}
return false;
}
public String filterSensitiveWord(String text, char replacement) {
StringBuilder filteredText = new StringBuilder(text);
int n = text.length();
for (int i = 0; i < n; i++) {
for (int j = i + 1; j <= i + maxLength && j <= n; j++) {
String subStr = text.substring(i, j);
if (sensitiveWords.contains(subStr)) {
for (int k = i; k < j; k++) {
filteredText.setCharAt(k, replacement);
}
i = j - 1;
break;
}
}
}
return filteredText.toString();
}
}
标签:DFAFilter,int,text,xx,算法,查找,dfaFilter,DFA,public
From: https://blog.51cto.com/u_15497049/7179212