`
iovy
  • 浏览: 5650 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

过滤黑名单

阅读更多
最近公司需要个过滤黑名单的程序,到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;
        }
    }
     

}
分享到:
评论

相关推荐

    过滤黑名单.exe

    因工作需要,经常要过滤黑名单,嫌每次用excel去vlookup太麻烦,就自己用delphi7编写的过滤黑名单小程序,需要的来拿。

    PHP过滤黑名单关键字的方法

    复制代码 代码如下://过滤黑名单关键字函数 function check_($data){  $keywords = “你是大神吗|你好|去死”;  if(preg_match(“/$keywords/i”,$data)){  return;  }else{  return $data;  } } ...

    Spark实现黑名单实时过滤-内含源码以及设计说明书(可以自己运行复现).zip

    在大数据处理领域,实时分析已经成为不可或缺的一部分,特别是在金融、电信、电商等行业中,实时过滤黑名单数据对于防止欺诈、保护用户安全至关重要。本教程将详细介绍如何利用Apache Spark实现黑名单的实时过滤功能...

    CUCM 黑名单配置

    其中,黑名单功能是保障通信安全的重要手段之一,主要用于屏蔽或过滤掉已知的骚扰或诈骗电话,从而有效地保护企业的正常通信不受干扰。 #### 黑名单功能配置详解 在CUCM中,黑名单功能主要通过以下几个关键步骤来...

    黑名单功能需求说明1

    4. **好处分析**:黑名单功能不仅使企业能够主动防御恶意简历的骚扰,还能通过黑名单记录的数据辅助审核部门进行决策,有效过滤不良简历,从源头提升简历的整体质量,减少无效的筛选工作。 5. **技术评估**:具体的...

    ipguard之IM帐号管控和Webmail过滤黑白名单使用说明.pdf

    1. **Webmailfilter**:定义网页邮件主机过滤黑名单,不记录指定邮件主机发送的网页邮件,支持通配符,多主机间用分号分隔。 2. **WebmailfilterWL**:定义网页邮件主机过滤白名单,记录指定邮件主机发送的网页邮件...

    黑白名单短信过滤,分成白名单和黑名单

    - **黑名单**:包含已知的垃圾短信发送者号码,这些号码发送的短信会被自动拦截或标记为垃圾短信。 #### 三、关键字过滤 除了黑白名单之外,另一种常见的过滤方法是**关键字过滤**。这种方法通过检查短信中的文本...

    H3C交换机-黑名单、MAC绑定和ACL组合配置举例

    1. 黑名单:它是一种报文屏蔽技术,通过匹配报文的源IP地址来进行过滤。静态黑名单需要管理员手动添加,而动态黑名单则能够自动识别潜在的攻击行为,并将攻击者的IP地址加入黑名单中进行阻断。动态黑名单通常与IP...

    myAutoLoginWeb.rar JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤

    JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter...

    IP数据包过滤,过滤端口、黑名单、网段等(修改后的全部源码)

    * BLANK_IP_FILTER类型: IP黑名单过滤。 * NET_FILTER类型:子网过滤。 * protocol参数:协议号 * 协议可以指定协议类型,TCP=6,UDP=17,ICMP=1。如果指定=0,表示对所有协议作用。 * sourceIp、sourceMask参数:源IP...

    exchange邮件黑名单

    黑名单可以是静态的(手动添加)或动态的(基于实时黑名单服务),有助于过滤掉大量不希望收到的邮件,提高邮箱系统的安全性。 #### 二、Exchange邮件黑名单设置方法 1. **手动添加黑名单:** - 打开Exchange管理...

    联系人黑名单

    在Android操作系统中,联系人黑名单功能是一个非常实用的特性,它允许用户阻止特定号码的来电和短信,以避免不受欢迎的通信干扰。"联系人黑名单"这个标题直指这一核心功能,强调了对特定联系人的阻止操作。描述中的...

    HyBPS-黑名单检索系统-恒隆兴

    根据提供的文件信息,我们可以详细阐述关于HyBPS-黑名单检索系统的相关知识点,包括系统的定义、功能、技术特点、业务需求、系统规划等多个方面。 HyBPS即Hybrid Blacklist Processing System(混合黑名单处理系统...

    IP数据包过滤,过滤端口、黑名单、网段等

    * 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实现基于Spark-Streaming的黑名单实时过滤系统的设计与实现.zip

    介绍了如何使用Python和Apache Spark Streaming构建一个实时黑名单过滤系统。该系统利用Spark的微批处理能力,通过TCP套接字接收实时数据流,并根据预定义的黑名单对数据进行过滤。在设计中,黑名单以广播变量的形式...

    10个超级有用值得收藏的PHP代码片段

    黑名单过滤函数is_spam()用于检查文本中是否含有黑名单中的单词,这些单词存储在一个文件中,每行一个单词,可选性支持使用正则表达式进行模糊匹配。黑名单文件中每行数据格式为“单词:出现次数”,其中单词部分如需...

    利用远程service(aidl)拦截黑名单号码来电

    本主题将深入探讨如何利用远程Service(AIDL,Android Interface Definition Language)来实现黑名单号码来电的拦截功能。 首先,我们需要理解什么是AIDL。AIDL是Android提供的一种接口定义工具,它允许我们定义...

Global site tag (gtag.js) - Google Analytics