最近公司需要个过滤黑名单的程序,到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;
}
}
}
分享到:
- 2009-03-09 11:08
- 浏览 1433
- 评论(0)
- 论坛回复 / 浏览 (0 / 1573)
- 查看更多
相关推荐
因工作需要,经常要过滤黑名单,嫌每次用excel去vlookup太麻烦,就自己用delphi7编写的过滤黑名单小程序,需要的来拿。
复制代码 代码如下://过滤黑名单关键字函数 function check_($data){ $keywords = “你是大神吗|你好|去死”; if(preg_match(“/$keywords/i”,$data)){ return; }else{ return $data; } } ...
在大数据处理领域,实时分析已经成为不可或缺的一部分,特别是在金融、电信、电商等行业中,实时过滤黑名单数据对于防止欺诈、保护用户安全至关重要。本教程将详细介绍如何利用Apache Spark实现黑名单的实时过滤功能...
其中,黑名单功能是保障通信安全的重要手段之一,主要用于屏蔽或过滤掉已知的骚扰或诈骗电话,从而有效地保护企业的正常通信不受干扰。 #### 黑名单功能配置详解 在CUCM中,黑名单功能主要通过以下几个关键步骤来...
4. **好处分析**:黑名单功能不仅使企业能够主动防御恶意简历的骚扰,还能通过黑名单记录的数据辅助审核部门进行决策,有效过滤不良简历,从源头提升简历的整体质量,减少无效的筛选工作。 5. **技术评估**:具体的...
1. **Webmailfilter**:定义网页邮件主机过滤黑名单,不记录指定邮件主机发送的网页邮件,支持通配符,多主机间用分号分隔。 2. **WebmailfilterWL**:定义网页邮件主机过滤白名单,记录指定邮件主机发送的网页邮件...
- **黑名单**:包含已知的垃圾短信发送者号码,这些号码发送的短信会被自动拦截或标记为垃圾短信。 #### 三、关键字过滤 除了黑白名单之外,另一种常见的过滤方法是**关键字过滤**。这种方法通过检查短信中的文本...
1. 黑名单:它是一种报文屏蔽技术,通过匹配报文的源IP地址来进行过滤。静态黑名单需要管理员手动添加,而动态黑名单则能够自动识别潜在的攻击行为,并将攻击者的IP地址加入黑名单中进行阻断。动态黑名单通常与IP...
JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter...
* BLANK_IP_FILTER类型: IP黑名单过滤。 * NET_FILTER类型:子网过滤。 * protocol参数:协议号 * 协议可以指定协议类型,TCP=6,UDP=17,ICMP=1。如果指定=0,表示对所有协议作用。 * sourceIp、sourceMask参数:源IP...
黑名单可以是静态的(手动添加)或动态的(基于实时黑名单服务),有助于过滤掉大量不希望收到的邮件,提高邮箱系统的安全性。 #### 二、Exchange邮件黑名单设置方法 1. **手动添加黑名单:** - 打开Exchange管理...
在Android操作系统中,联系人黑名单功能是一个非常实用的特性,它允许用户阻止特定号码的来电和短信,以避免不受欢迎的通信干扰。"联系人黑名单"这个标题直指这一核心功能,强调了对特定联系人的阻止操作。描述中的...
根据提供的文件信息,我们可以详细阐述关于HyBPS-黑名单检索系统的相关知识点,包括系统的定义、功能、技术特点、业务需求、系统规划等多个方面。 HyBPS即Hybrid Blacklist Processing System(混合黑名单处理系统...
* BLANK_IP_FILTER类型: IP黑名单过滤。 * NET_FILTER类型:子网过滤。 * protocol参数:协议号 * 协议可以指定协议类型,TCP=6,UDP=17,ICMP=1。如果指定=0,表示对所有协议作用。 * sourceIp、sourceMask...
此外,为了提升用户体验,可以开发移动应用,如“快速拨号”(kuaidial)应用,该应用能够集成此黑名单数据库,并在接收到电话时自动识别和过滤骚扰号码。开发者可以使用Android或iOS的SDK来实现这个功能,通过调用...
这个页面的功能主要包括添加黑名单项以及对黑名单进行审核。 1. **HTML基础知识**:首先,我们需要了解HTML的基本结构,包括`<!DOCTYPE html>`声明、`<html>`根元素、`<head>`头部元素和`<body>`主体元素。HTML标签...
介绍了如何使用Python和Apache Spark Streaming构建一个实时黑名单过滤系统。该系统利用Spark的微批处理能力,通过TCP套接字接收实时数据流,并根据预定义的黑名单对数据进行过滤。在设计中,黑名单以广播变量的形式...
黑名单过滤函数is_spam()用于检查文本中是否含有黑名单中的单词,这些单词存储在一个文件中,每行一个单词,可选性支持使用正则表达式进行模糊匹配。黑名单文件中每行数据格式为“单词:出现次数”,其中单词部分如需...
本主题将深入探讨如何利用远程Service(AIDL,Android Interface Definition Language)来实现黑名单号码来电的拦截功能。 首先,我们需要理解什么是AIDL。AIDL是Android提供的一种接口定义工具,它允许我们定义...