过滤黑名单

最近公司需要个过滤黑名单的程序,到javaeye上看了下,大家搞的太难了,看不大懂,就写了个简单的。
一个树,每个节点有个hashmap,一个iskeyword,通过isKeyWord来判断是否关键字,如果不是通过hashmap向下找寻,如果hashmap找不到,从root节点重新找
import java.util.*;


public class Trie {

private Vertex root;

public static void main(String[] args){
Trie t = new Trie();
t.addWord("中");
t.addWord("中华");
t.addWord("中华人");
t.addWord("胡");
System.out.println(t.isExistWords("啊uhfgdigdfg时发生大幅度上升的方式的答复 "));
System.out.println(t.isExistWords("中啊uhfgdigdfg时发生大幅度上升的方式的答复 "));
System.out.println(t.isExistWords("胡啊uhfgdigdfg时发生大幅度上升的方式的答复 "));
}


protected class Vertex {
protected String value;
protected boolean isKeyWord;
protected Map edges;

Vertex(String value,boolean inital) {
isKeyWord = false;
this.value = value;
if(inital) edges = new HashMap();
}

}

public Trie () {
root = new Vertex("root",true);
}


public boolean isExistWords(String word) {
return isExistWords(root, word);
}
private boolean isExistWords(Vertex vertex, String wordSegment) {
if(vertex.isKeyWord) return true;
if (wordSegment.length() == 0) {
if(!vertex.isKeyWord)
return false;
}
char c = wordSegment.charAt(0);
Vertex v = (Vertex) vertex.edges.get(String.valueOf(c));
if (v == null) {
return isExistWords(root, wordSegment.substring(1));
} else {
return isExistWords(v, wordSegment.substring(1));
}
}

public void addWord(String word) {
addWord(root, word);
}

private void addWord(Vertex vertex, String word) {
if (word.length() != 0) {
char c = word.charAt(0);
Vertex v = new Vertex(String.valueOf(c),false);
if (!vertex.edges.keySet().contains(String.valueOf(c))) {
v.edges = new HashMap();
vertex.edges.put(String.valueOf(c), v);
}else{
v = (Vertex) vertex.edges.get(String.valueOf(c));
}
addWord(v, word.substring(1));
}else{
vertex.isKeyWord = true;
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值