一个简单高效的禁词过滤类
使用方法:
import java.util.HashMap;public class SimpleTreeFilter{public class TreeNode{public char c;public HashMap<Character, TreeNode> next;public boolean isEnd=false;}HashMap<Character, TreeNode> head = new HashMap<Character, TreeNode>();public void addKeyword(String word) {word=word.toLowerCase();int len = word.length();if(len==0){return;}char firstChar = word.charAt(0);TreeNode node;if(head.containsKey(firstChar)){node = head.get(firstChar);}else{node = new TreeNode();node.c=firstChar;head.put(firstChar, node);}for(int i=1;i<len;i++){char c=word.charAt(i);if(node.next==null){node.next = new HashMap<Character, TreeNode>();}if(node.next.containsKey(c)){node = node.next.get(c);}else{TreeNode tNode = new TreeNode();tNode.c=c;node.next.put(c, tNode);node = tNode;}}node.isEnd=true;}public String contains(String line) {int len = line.length();line=line.toLowerCase();for(int i=0;i<len;i++){char c=line.charAt(i);if(head.containsKey(c)){TreeNode node = head.get(c);if(node.isEnd==true){return (c+"").toLowerCase();}int j=i+1;while(j<len){char cTemp = line.charAt(j);if(node.next.containsKey(cTemp)){node = node.next.get(cTemp);if(node.isEnd==true){return line.substring(i,j+1).toLowerCase();}}else{break;}j++;}}}return null;}}