文档章节

JAVA 实现DFA算法

Z
 Z13
发布于 2017/01/18 16:38
字数 233
阅读 33
收藏 0

1、创建敏感字Map

public static Map addWordToHashMap(Set<String> keyWordSet) {
        if(0 == keyWordSet.size()) return new HashMap();
        Map map = new HashMap(keyWordSet.size());
        String key = null;
        Map nowMap = null;
        Map<String, String> newWorMap = null;
        Iterator<String> iterator = keyWordSet.iterator();
        while(iterator.hasNext()){
            key = iterator.next();
            nowMap = map;
            for(int i = 0; i < key.length(); i++){
                char keyChar = key.charAt(i);
                Map wordMap = (Map) nowMap.get(keyChar);
                if(wordMap != null) nowMap =  wordMap;
                else{
                    newWorMap = new HashMap<String,String>();
                    nowMap.put(keyChar, newWorMap);
                    nowMap = newWorMap;
                }
                if(i == key.length() - 1) nowMap.put("isEnd", "1");
            }
        }
        return map;
    }

 

2、创建正则特殊符号过滤

public static String formatString(String str) {
        if (StringUtils.isNotBlank(str)) {
            String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
            return   Pattern.compile(regEx).matcher(str).replaceAll("").trim();
        }
        return "";
    }

 

3、校验字符串

 

public static String checkWork(String txt, Map map, boolean needToFormat) {
        try {
            if (needToFormat) txt = formatString(txt);
            StringBuffer sb = new StringBuffer();
            boolean has = false;
            char word;
            int num;
            for (int i = 0; i < txt.length(); i++) {
                word = txt.charAt(i);
                sb = new StringBuffer(word);
                if (map.containsKey(word)) {
                    Map m = (Map) map.get(word);
                    sb.append(word);
                    num = i + 1;
                    while (true) {
                        if (num < txt.length()) {
                            word = txt.charAt(num++);
                            sb.append(word);
                            if (m.containsKey(word)){
                                m = (Map) m.get(word);
                                if (m.containsKey("isEnd")) {
                                    has = true;
                                    return sb.toString();
                                }
                            } else break;
                        } else break;
                    }
                }
            }
            if (has)  return sb.toString();
        } catch (Exception e) {
            //logger.error("检验敏感字出错,原因为:{}", e);
            e.printStackTrace;
        }
        return null;
    }
 

 

 

本文转载自:http://peak1992.iteye.com/blog/2353288

Z

Z13

粉丝 0
博文 8
码字总数 0
作品 0
广州
程序员
私信 提问
java+html实现弹幕功能并集成敏感词过滤功能,实现思路

即时评论和即时弹幕功能架构设计: 后端数据存储 前端弹幕展示方式 前后台即时通讯方式 敏感词过滤系统 数据存储 弹幕数据庞大,一般是无用数据,存储的话纯文本就行,结构化要求不强,数据不...

两毛五哥哥
2017/11/16
0
0
Java 正则表达式 StackOverflowError 问题及其优化

正则可以看做一门 DSL,但它却应用极其广泛,可以轻松解决很多场景下的字符串匹配、筛选问题。同时呢有句老话: “ 如果你有一个问题,用正则表达式解决,那么你现在就有两个问题了。” Some...

大数据之路
2015/08/02
2.6K
0
双数组字典树关键词查询匹配和替换

大家在进行关键词匹配和替换的时候都是用的什么算法?很多人都可能有这样的需求,比如聊天文本中的敏感词替换、html文本中的关键词加超链接等。不深入技术算法和时刻关注程序性能的人来说,就...

银杏果果
2016/12/24
314
1
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0
JVM系列第8讲:JVM 垃圾回收机制

在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由《Java 虚拟机规范》指定的,每个 Java 虚拟机可能都有不同的实现。其实涉及到 Java 虚拟机的内存,就不得不谈到 Ja...

陈树义
2018/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Security 自定义登录认证(二)

一、前言 本篇文章将讲述Spring Security自定义登录认证校验用户名、密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Security...

郑清
23分钟前
1
0
php yield关键字以及协程的实现

php的yield是在php5.5版本就出来了,而在初级php界却很少有人提起,我就说说个人对php yield的理解 Iterator接口 在php中,除了数组,对象可以被foreach遍历之外,还有另外一种特殊对象,也就是继承...

冻结not
36分钟前
2
0
servlet请求和响应的过程

本文转载于:专业的前端网站➥servlet请求和响应的过程 1.加载 Servlet类被加载到Java虚拟机中,并且实例化。在这个过程中,web容器(例如tomcat)会调用Servlet类的公开无参构造函数,产生一...

前端老手
36分钟前
2
0
golang 1.13 errors 包来了,不用写“err 气功波”代码

引 这篇是对 errors 包 的姿势挖掘 气功波错误代码 从 http.Get()返回的错误 判断 syscall.ECONNREFUSED 错误.以前要对 go 标准库 error 结构有点熟悉,才能写出下面的代码 func CmdErr(err ...

guonaihong
40分钟前
26
0
喜玛拉雅已听书单

时间倒序排 书名 作者 状态 唐砖 孑与2 进行中 死灵之书(克苏鲁神话合集) 阿卜杜拉·阿尔哈萨德 进行中 赡养人类 刘慈欣 完结 赡养上帝 刘慈欣 完结 中国太阳 刘慈欣 完结 中国太阳 刘慈欣...

Alex_Java
41分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部