代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
java敏感词过滤
作者:
/ 发布于
2016/4/26
/
512
敏感词过滤在网站开发必不可少。一般用DFA,这种比较好的算法实现的.
import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * @title KeywordFilter * @description TODO * @author * @date 2014-4-17 * @version 1.0 */ public class KeywordFilter { /** 敏感词集合 * {法={isEnd=0, 轮={isEnd=1}}, 中={isEnd=0, 国={isEnd=0, 人={isEnd=1}, 男={isEnd=0, 人={isEnd=1}}}}} * */ private HashMap keysMap = new HashMap(); /** * 添加敏感词 * @param keywords */ public void addKeywords(List<String> keywords) { for (int i = 0; i < keywords.size(); i++) { String key = keywords.get(i).trim(); HashMap nowhash = keysMap;//初始从最外层遍历 for (int j = 0; j < key.length(); j++) { char word = key.charAt(j); Object wordMap = nowhash.get(word); if (wordMap != null) { nowhash = (HashMap) wordMap; } else { HashMap<String, String> newWordHash = new HashMap<String, String>(); newWordHash.put("isEnd", "0"); nowhash.put(word, newWordHash); nowhash = newWordHash; } if (j == key.length() - 1) { nowhash.put("isEnd", "1"); } } } } /** * 检查一个字符串从begin位置起开始是否有keyword符合, * 如果没有,则返回0 * 如果有符合的keyword值,继续遍历,直至遇到isEnd = 1,返回匹配的keyword的长度, */ private int checkKeyWords(String txt, int begin) { HashMap nowhash = keysMap; int res = 0; for (int i = begin; i < txt.length(); i++) { char word = txt.charAt(i); Object wordMap = nowhash.get(word);//得到该字符对应的HashMap if (wordMap == null) { return 0;//如果该字符没有对应的HashMap,return 0 } res++;//如果该字符对应的HashMap不为null,说明匹配到了一个字符,+1 nowhash = (HashMap) wordMap;//将遍历的HashMap指向该字符对应的HashMap if (((String) nowhash.get("isEnd")).equals("1")) {//如果该字符为敏感词的结束字符,直接返回 return res; } else { continue; } } return res; } /** * 判断txt中是否有关键字 */ public boolean isContentKeyWords(String txt) { for (int i = 0; i < txt.length(); i++) { int len = checkKeyWords(txt, i); if (len > 0) { return true; } } return false; } /** * 返回txt中关键字的列表 */ public List<String> getTxtKeyWords(String txt) { List<String> list = new ArrayList<String>(); int l = txt.length(); for (int i = 0; i < l;) { int len = checkKeyWords(txt, i); if (len > 0) { String tt = txt.substring(i, i + len); list.add(tt); i += len; } else { i++; } } return list; } /** * 初始化敏感词列表 * */ public void initfiltercode() { List<String> keywords = new ArrayList<String>(); keywords.add("中国人"); keywords.add("中国男人"); keywords.add("法轮"); this.addKeywords(keywords); } public static void main(String[] args) throws IOException { KeywordFilter filter = new KeywordFilter(); filter.initfiltercode(); String txt = "哈哈,反倒是 法轮热舞功,中国人,"; boolean boo = filter.isContentKeyWords(txt); System.out.println(boo); List<String> set = filter.getTxtKeyWords(txt); System.out.println("包含的敏感词如下:" + set); } }
试试其它关键字
敏感词过滤
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3