敏感词过滤java实现
2016-02-17 11:17
721 查看
package com.iflytek.epdcloud.ercsvc.service; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class TestSensitiveWorld { Map sensitiveWordMap; public static void main(String[] args) { // TODO Auto-generated method stub Set<String> keyWordSet=new HashSet<String>(); keyWordSet.add("日本鬼子"); keyWordSet.add("日本人"); keyWordSet.add("毛泽东"); TestSensitiveWorld test=new TestSensitiveWorld(); test.addSensitiveWordToHashMap(keyWordSet); Iterator itr= test.sensitiveWordMap.entrySet().iterator(); while(itr.hasNext()) { Map.Entry entry=(Entry) itr.next(); System.out.println(entry.getKey()+":"+entry.getValue()); } String str="日本鬼子日本罕见还有日本人日本女孩毛泽毛泽江泽明毛泽东我的送给日本鬼子日本人日本毛泽东"; System.out.println("待检测语句字数:"+str.length()); System.out.println("matchFlag:" +test.checkSensitiveWord(str)); } public void addSensitiveWordToHashMap(Set<String> keyWordSet) { sensitiveWordMap=new HashMap(keyWordSet.size()); String key=null; Map nowMap=null; Map<String,String> newWordMap=null; //迭代keyWordSet Iterator<String> iterator=keyWordSet.iterator(); while(iterator.hasNext()) { key=iterator.next();//关键字 nowMap=sensitiveWordMap; for(int i=0;i<key.length();i++) { char keyChar=key.charAt(i); Object wordMap=nowMap.get(keyChar); if(wordMap!=null) { nowMap=(Map)wordMap; } else { newWordMap=new HashMap<String,String>(); newWordMap.put("isEnd", "0"); nowMap.put(keyChar, newWordMap); nowMap=newWordMap; } } nowMap.put("isEnd", "1"); } } //验证敏感词 public int checkSensitiveWord(String txt) { boolean flag=false;//标志符,如果进入子Map获取关键字为空,则返回头Map从新搜索,flag=true;否则直接搜索下个关键字 int matchFlag=0; //计量搜索到的敏感词个数 char word=0; Map nowMap=sensitiveWordMap; for(int i=0;i<txt.length();i++) { word=txt.charAt(i); nowMap=(Map)nowMap.get(word); if(nowMap!=null) { flag=true; if("1".equals(nowMap.get("isEnd"))) { matchFlag++; nowMap=null; } } if(nowMap==null) { nowMap=sensitiveWordMap; if(flag) { i--; flag=false; } } } return matchFlag; } }
相关文章推荐
- Java常用的安全算法
- struts配置文件详解
- Java数字签名算法--RSA
- spring简单示例
- spring框架之AOP
- java中的队列
- 从第一个Java文件开始
- 深入分析JavaWeb -- 国际化(i18n)
- java中int类型和byte[]数组之间的转换
- Collection集合
- 深入分析JavaWeb 21 -- JSTL核心标签库
- java中映射表
- XML读写之JDOM
- java项目转为maven项目
- Java和C的区别
- java GBK中文乱码问题
- javabean in structs2
- 深入分析JavaWeb 20 -- EL表达式和EL函数库
- mybatis配置多数据源
- spring aop