import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* 铭感词过滤工具类
*
* @Author:zkx
* @date:2019年8月5日
*/
public class SensitivewordFilterUtil {
@SuppressWarnings("rawtypes")
private Map sensitiveWordMap = null;
//最小匹配规则
public static int minMatchTYpe = 1;
//最大匹配规则
public static int maxMatchType = 2;
/**
* 构造函数,初始化敏感词库
*/
public SensitivewordFilterUtil() {
sensitiveWordMap = new SensitiveWordInit().initKeyWord();
}
/**
* 判断文字是否包含敏感字符
*
* @param txt 文字
* @param matchType 匹配规则 1:最小匹配规则,2:最大匹配规则
* @return 若包含返回true,否则返回false
*/
public boolean isContaintSensitiveWord(String txt, int matchType) {
boolean flag = false;
for (int i = 0; i < txt.length(); i++) {
//判断是否包含敏感字符
int matchFlag = this.CheckSensitiveWord(txt, i, matchType);
//大于0存在,返回true
if (matchFlag > 0) {
flag = true;
}
}
return flag;
}
/**
* 获取文字中的敏感词
*
* @param txt 文字
* @param matchType 匹配规则 1:最小匹配规则,2:最大匹配规则
* @return
*/
public Set<String> getSensitiveWord(String txt, int matchType) {
Set<String> sensitiveWordList = new HashSet<String>();
for (int i = 0; i < txt.length(); i++) {
//判断是否包含敏感字符
int length = CheckSensitiveWord(txt, i, matchType);
//存在,加入list中
if (length > 0) {
sensitiveWordList.add(txt.substring(i, i + length));
//减1的原因,是因为for会自增
i = i + length - 1;
}
}
return sensitiveWordList;
}
/**
* 替换敏感字字符
*
* @param txt
* @param matchType
* @param replaceChar 替换字符,默认*
*/
public String replaceSensitiveWord(String txt, int matchType, String replaceChar) {
String resultTxt = txt;
//获取所有的敏感词
Set<String> set = getSensitiveWord(txt, matchType);
Iterator<String> iterator = set.iterator();
String word = null;
String replaceString = null;
while (iterator.hasNext()) {
word = iterator.next();
replaceString = getReplaceChars(replaceChar, word.length());
resultTxt = resultTxt.replaceAll(word, replaceString);
}
return resultTxt;
}
/**
* 获取替换字符串
*
* @param replaceChar
* @param length
* @return
*/
private String getReplaceChars(String replaceChar, int length) {
String resultReplace = replaceChar;
for (int i = 1; i < length; i++) {
resultReplace += replaceChar;
}
return resultReplace;
}
/**
* 检查文字中是否包含敏感字符,检查规则如下:<br>
*
* @param txt
* @param beginIndex
* @param matchType
* @return,如果存在,则返回敏感词字符的长度,不存在返回0
*/
@SuppressWarnings({"rawtypes"})
public int CheckSensitiveWord(String txt, int beginIndex, int matchType) {
//敏感词结束标识位:用于敏感词只有1位的情况
boolean flag = false;
//匹配标识数默认为0
int matchFlag = 0;
char word = 0;
Map nowMap = sensitiveWordMap;
for (int i = beginIndex; i < txt.length(); i++) {
word = txt.charAt(i);
//获取指定key
nowMap = (Map) nowMap.get(word);
//存在,则判断是否为最后一个
if (nowMap != null) {
//找到相应key,匹配标识+1
matchFlag++;
//如果为最后一个匹配规则,结束循环,返回匹配标识数
if ("1".equals(nowMap.get("isEnd"))) {
//结束标志位为true
flag = true;
//最小规则,直接返回,最大规则还需继续查找
if (SensitivewordFilterUtil.minMatchTYpe == matchType) {
break;
}
}
} else { //不存在,直接返回
break;
}
}
//长度必须大于等于1,为词
if (matchFlag < 2 || !flag) {
matchFlag = 0;
}
return matchFlag;
}
}
相关推荐
Java Filter——敏感词汇过滤
Filter的简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 它主要用于对用户请求进行预处理,也可以对HttpServlet...
java文本敏感词、关键字搜索检测
背景 在做一些跟内容相关的项目的时候,经常需要对内容文本中的内容进行检测,检测文本中是否包含某个敏感、违法等词汇,例如“贷款”、“发票”之类的。有些狡猾的用户可能知道“贷款”在你的系统中是敏感词,不能审核通过,便使用“贷 款”、“贷$款”、"贷;款"等这种方式故意欺骗你的系统,让你的系统无法简单找出这些敏感词。 解决方案 解决方案一:使用List的contains方法检测文本中是否有敏感词 这个是最容易想到的,将所有敏感词存放在List中,每次需要检测文本中是否有敏感词的时候,for循环list列表
java中敏感词过滤工具类
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.ckpi.utils; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; i.
java实现敏感字过滤工具类
实现敏感字的过滤思路:1. 读取敏感词库;2.比较字符串中是否有敏感词库中的铭感词以下提供判断是否有敏感词的方法booleancheckSenstiveWord()和将敏感词转换为*字符的方法StringfilterInfoAfter().工具类:package yofc.demo; import java.io.BufferedReader; import java.io.IOExcep...
Filter实现敏感词汇过滤
太晚了,就不文字说明了直接贴代码,注意增强的是相关方法与参数 package cn.itcast.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedReader; import java.io.FileReader; import java.i...
java后台判断敏感词汇
utils package com.xlkj.mobile.util; import java.io.*; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java....
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www.cnblogs.com/fanshuyao/ 一、问题描述 很多对外网站的某些内容都需要过滤敏感词,避免政治与色@情上的问题。 二、解决方案 使用词库进行匹配过滤成 * (星号) Ja...
Java实现的敏感词汇过滤技术指南
在编程中,数据结构是组织和存储数据的一种方式,它使我们能够有效地访问和修改数据。数据结构是算法实现的基础,选择合适的数据结构对于提高程序的效率至关重要。数据结构可以被分为两大类:线性结构和非线性结构。线性结构包括数组、链表、栈、队列等。这些结构的特点是数据元素之间存在一对一的线性关系,适合处理数据元素之间具有“先入先出”或“后入先出”等顺序关系的问题。非线性结构包括树、图等。非线性结构中的元素之间存在一对多或多对多的关系,适合处理具有层次或网络状结构的数据。
Java 工具类过滤敏感词
在社交化的电商项目中,很多用户提交的信息涉及敏感性,比如:用户评论、用户发表的动态等。目前平台已经介入第三方平台的Saas服务,在线过滤用户提交的敏感词信息。然后,在实际使用过程中存在一些敏感词漏处理的情况,从而导致平台声誉受损。基于此,我们准备在平台增加一个自定义敏感词过滤的功能模块,对于第三方敏感词服务漏处理的敏感词,我们将通过后台配置在敏感词库中,并进行补充处理。
子网划分详解
还不会子网划分?看这篇就够了,保姆级教程
C语言新手必练:10个实战小项目带你快速上手(附完整代码)
本文为C语言初学者精选10个实战项目,从基础的温度转换器到高级的迷宫求解算法,涵盖输入输出、条件判断、循环控制、数组操作等核心知识点。每个项目配有完整代码和详细解析,帮助新手通过实践掌握编程思维,特别适合刚学完语法但缺乏实战经验的学习者。
Java 敏感词过滤工具类及文本
很简单
基于Simulink的防空导弹六自由度弹道建模与仿真实战
本文详细介绍了基于Simulink的防空导弹六自由度弹道建模与仿真方法。通过分析导弹动力学原理、Simulink环境配置、气动力建模、推进与控制系统设计等关键环节,提供了一套完整的实战指南。文章特别强调了六自由度模型在防空导弹仿真中的重要性,并分享了常见问题排查与优化建议,为相关领域工程师提供实用参考。
【Java 进阶篇】保护你的应用:Java 过滤器实现敏感词汇过滤
通过使用 Java 过滤器,我们可以轻松地实现敏感词汇过滤的功能,以保护用户免受不良内容的侵害。在实际项目中,你可能需要根据具体情况调整和优化这个简单的实现,例如支持更复杂的敏感词汇匹配、提供用户反馈等功能。不管怎样,敏感词汇过滤是构建一个更加安全和健壮的 Web 应用程序的重要一步。
别再手动抄表了!用MCGS触摸屏自动存数据到U盘,5分钟搞定报表导出
本文详细介绍了如何利用MCGS触摸屏实现工业数据自动记录与U盘导出,彻底告别传统手动抄表方式。通过昆仑通态MCGS系统,可构建零误差自动化报表系统,实现实时数据采集、双重备份及标准CSV格式导出,大幅提升数据准确性和工作效率。
DRAM架构演进与HBM技术在高性能计算中的应用
DRAM(动态随机存取存储器)是现代计算系统中关键的内存技术,其架构优化直接影响数据供给能力。随着AI训练和科学计算等数据密集型负载的普及,传统DDR架构面临带宽墙、能效比和访问粒度等挑战。HBM(高带宽内存)通过3D堆叠技术(如TSV硅通孔)和异构集成(如PIM存内计算)显著提升了带宽和能效比。这些技术在高性能计算、AI推理和大模型训练等场景中展现出巨大潜力,例如HBM3的带宽可达819GB/s,能效比低至0.95pJ/b。未来,DRAM技术将继续向更高密度、更低功耗和更智能的内存计算方向发展。
java过滤器,实现敏感词汇过滤的示例
过滤器类 package web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.lang.refl...
Ollama + OpenCLAW 在 Windows 系统的完整部署指南
Windows 部署优先选 WSL2,避免原生环境的权限/兼容性问题;网络问题通过“离线包+国内镜像”解决,版本问题通过升级 Node.js 解决;内存不足可切换轻量模型或增大 WSL2 内存分配;核心链路:Ollama(模型管理)→ Gateway(网关)→ OpenCLAW TUI(交互),各组件启动正常即可稳定使用。
敏感词汇过滤
敏感词汇过滤功能(DFA算法) 作者:MrKay 说明: 个人网站虽然已经部署成功,但是仍然有一些东西没有考虑到,这里介绍对数据库安全,对评论敏感词汇过滤的一些知识点,也是对自己学习的总结;(评论功能其实很简单,就是将评论数据写入到评论数据库表,评论数据库表中记录着该评论的博客文章id,这其实不是难点,难点是对数据库的设计,因为评论者A可能会对评论者B进行回复,这就牵扯到子父关系,数据库设计时就需要添加自关联) 技术:DFA算法、MySQL、SpringData Jpa、SpringBoot等 时间:20
【教程4>第1章>第12节】通过Verilog读取txt格式数据进行测试并将结果导入到matlab
我们在verilog的testbench中,调用txt文件,将上述正弦样本数据作为测试激励输入到verilog模块中。通过这个方法,可以将一些较为复杂的数据导入到verilog中,进行FPGA数据处理模块的开发。即通过w方式打开一个新的txt文件,然后将verilog的输出保存到XY1.txt文件中。这个部分是txt文件的路径,实际使用时,修改为您自己的路径,或者将txt文件放在和我一样的路径中。这个是数据长度,matlab产生的txt多少长度,这个参数就修改为多少长度。这个txt就是保存这段数据的文件。
Unreal 从入门到精通之VR常用操作
本文总结了使用Unreal5开发VR项目时遇到的常见问题及其解决方案。首先,介绍了如何通过VRPawn的TryTeleport函数设置玩家视角位置,确保头显移动时安全区域的正确传送。其次,详细说明了如何在Unreal中播放视频,包括导入视频文件、创建媒体播放器和媒体纹理,并将其应用到3D物体上。接着,讲解了如何播放VR全景视频,建议使用MediaPlate媒体板并调整几何体为球体。最后,讨论了如何手动打开和关闭VR模式,以便在PC模式和头显模式之间切换。这些方法为VR开发提供了实用的技术指导。
Java实现过滤敏感词汇
Java实现过滤敏感词汇: 使用动态代理模式,增强返回值类型,替换敏感词汇
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)
在敏感词汇过滤这块,不同的算法所造成的性能差异是非常大的,选择一个合适的算法非常重要。因为以前做算法的时候做过类似前缀树的字符串匹配之类的算法,所以一开始就打算用前缀树做的,后面了解了一下DFA的相关算法原理,其实用在敏感词汇过滤这块,主要还是前缀树的应用。 这个算法最原始的实现我是采用的建立树结构的方式,发现性能还是不佳,最后借鉴了一些基于HashMap构造前缀树的方法来实现。算是使用比较广泛的算法了。在这里进行了完整的封装,并且做了一些小的优化。 这个算法并不是目前最好的敏感词过滤算法,但是比.
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
用动态代理实现Filter过滤敏感词汇的功能
(在服务器里边有很多地方都需要用户去录入数据,那么也就是说,这多个地方我们都需要对他们进行敏感词汇的过滤,那么这多个地方都需要进行过滤,那就意味着我们可能需要做一些通用的过滤方式,那么我们可以加一个过滤器,有这个过滤器之后,将来请...
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
过滤器-过滤敏感词汇
首先要准备好敏感词库,敏感词汇的格式如下: 短信猫|1 买枪|2 四大舰队|3 其中1代表禁用词:禁用词将禁止提交,2代表审核次:将以高亮字体显示,3代表过滤词:将替换为****, 过滤器代码实现如下: package cn.itcast.web.filter
Java Filter实现对敏感词的过滤
一、需求:敏感词汇 过滤 二、技术点:过滤器(Filter),代理增强(Proxy) 三、代码: 1、测试工程目录 2、src下创建敏感词文件 敏感词.txt 3、新建敏感词过滤器 SensitiveWordsFilter.java package com.mollen.filter; package com.mollen.filter.filter; import javax.servle...
1004



被折叠的 条评论
为什么被折叠?



