AJPFX讲解java关键词过滤算法
/**
- java关键字过滤
- HashMap实现DFA算法
- 关键词替换为*
- @author Methol
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class KeywordFilter {
/* 直接禁止的 /
private HashMap keysMap = new HashMap();
static final String tihuantxt = "**";
private int matchType = 1; // 1:最小长度匹配 2:最大长度匹配
public void addKeywords(List<String> keywords) {
for (int i = 0; i < keywords.size(); i++) {
String key = keywords.get(i).trim();
HashMap nowhash = null;
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");
}
}
}
}
/**
重置关键词
*/
public void clearKeywords() {
keysMap.clear();
}/**
- 检查一个字符串从begin位置起开始是否有keyword符合, 如果有符合的keyword值,返回值为匹配keyword的长度,否则返回零
flag 1:最小长度匹配 2:最大长度匹配
*/
private int checkKeyWords(String txt, int begin, int flag) {
HashMap nowhash = null;
nowhash = keysMap;
int maxMatchRes = 0;
int res = 0;
int l = txt.length();
char word = 0;
for (int i = begin; i < l; i++) {
word = txt.charAt(i);
Object wordMap = nowhash.get(word);
if (wordMap != null) {
res++;
nowhash = (HashMap) wordMap;
if (((String) nowhash.get("isEnd")).equals("1")) {
if (flag == 1) {
wordMap = null;
nowhash = null;
txt = null;
return res;
} else {
maxMatchRes = res;
}
}
} else {
txt = null;
nowhash = null;
return maxMatchRes;
}
}
txt = null;
nowhash = null;
return maxMatchRes;
}/**
返回txt中关键字的列表
*/
public String getTxtKeyWords(String txt) {
Set set = new HashSet();
int l = txt.length();
String newtxt = new String();
for (int i = 0; i < l;) {
int len = checkKeyWords(txt, i, matchType);
if (len > 0) {
newtxt += txt.substring(0, i);
newtxt += tihuantxt.substring(0, len);
newtxt += txt.substring(i + len, txt.length());
txt = newtxt;
newtxt = "";
i += len;
} else {
i++;
}
}
return txt;
}/**
仅判断txt中是否有关键字
*/
public boolean isContentKeyWords(String txt) {
for (int i = 0; i < txt.length(); i++) {
int len = checkKeyWords(txt, i, 1);
if (len > 0) {
return true;
}
}
txt = null;
return false;
}public int getMatchType() {
return matchType;
}public void setMatchType(int matchType) {
this.matchType = matchType;
}
}
转载于:https://blog.51cto.com/14314113/2388467
AJPFX讲解java关键词过滤算法相关推荐
- Java敏感词过滤、java关键词过滤工具包原理
原理:基于多叉树的查找. 第一步:把敏感词读入搜索多叉树中, 树结构: 第二步,对需过滤的句子进行逐字匹配: 比如句子:解放了全中国 1.记录起始位置start=0,读到了"解", ...
- AJPFX讲解Java 性能优化[4]:关于 finalize 函数
★finalize 函数的调用机制 俺经常啰嗦:"了解本质机制的重要性".所以今天也得先谈谈 finalize 函数的调用机制.在聊之前,先声明一下:Java虚拟机规范(见&quo ...
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java协同过滤算法的电影推荐系统f7s0a
要对当前自己的学校对于计算机毕业设计的要求以及严格程度有所了解,这个主要是借助上一届已经毕业的学长学姐了解一下,但是有一点要注意的是,对于每一届毕业生的毕业设计的处理,学校都有很大的调整,这一点尤其重 ...
- SQL注入绕过关键词过滤的小技巧及原理(union select为例)
本文以联合查询关键字union select为例讲解绕过关键词过滤的一些方法.之所以了解绕过,关键是发现sqlmap有时候真的是不靠谱,只能指定命令跑.有一些简单过滤很容易绕过却不能检 ...
- JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解
java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...
- 如何实现一个高效的关键词过滤功能?——DFA算法
文章目录 一.前言 二.何为DFA算法 三.DFA算法优化关键词过滤 四.java代码实现 五.总结 一.前言 有一个关键词库,此时需要检索一段文本中是否出现词库中的关键词,该如何实现? 小白回答:将 ...
- java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)
项目介绍 "互联网+"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人 ...
- java基于springboot+vue的协同过滤算法的图书推荐系统 nodejs
"互联网:"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人力物力造成 ...
- 计算机毕业设计之java+ssm基于协同过滤算法的图书推荐系统
计算机毕业设计之java+ssm基于协同过滤算法的图书推荐系统 项目介绍 "互联网:"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方 ...
最新文章
- python装饰器类-Python 装饰器装饰类中的方法
- 模拟jQuery ajax服务器端与客户端通信
- windows mysql 自动备份的几种方法
- 交互式计算机图形学总结:第六章 从顶点到片元
- Oracle数据库-主键(primary key)、外键(foreign key)、候选键(candidate key)、超键(super key)和references总结...
- [Java基础]Date类基础
- docker多个容器一起打包_如何链接多个Docker容器并封装结果?
- CUDA(*.cu)程序与C(*.c)源程序混合编译
- 【转】JavaScript中的this关键字使用的四种调用模式
- 朋友很喜欢打篮球,我用Python爬取了1000张他喜欢的NBA球星图片送给他【内附源码】
- 4k电视色彩表现测试软件,选高端4K电视 4K测试图帮你轻松分辨
- ftp下载工具,6款能够满足所有需求的ftp下载工具
- 2019年最新目标检测算法综述汇总
- python中的单引号和双引号有什么区别_python中单引号和双引号有什么区别
- PYTHON——自然间断点分级法
- C++学生管理系统课程设计
- 基于redis实现抢红包功能(包括余额退回处理)
- 青海省国家湿地公园功能区划数数据、全国湿地沼泽分布数据、全国省市县自然保护区
- Nature :利用基因编辑技术进行高产玉米研究新进展
- linux共享打印机smb,centos7 安装cups+smb共享打印机
热门文章
- SAP-MM 采购订单净价取值精度问题
- 2020 kali linux KDE桌面安装+美化
- 【项目实战】springboot+vue舞蹈课程在线学习系统-java舞蹈课程学习打卡系统的设计与实现
- MMO+Java:一、Java服务器相关基础知识:3、TCP的核心意涵与基本原理
- android webview全屏时自动切换横屏,安卓 webview播放视频及横屏
- 视频教程 | 长安链推出系列视频教程合集(入门)
- 软件测试如何定位分析bug?
- python实例:模拟超市收银抹零行为
- 哈尔滨工大计算机系2019届保研率是多少,2019年保研率将再提高,名校将逼近50%,网友:敢一律统考吗?...
- 【FinacialKnowledge】财务报表及名词解释