java 实现敏感词汇的过滤

article/2025/9/30 20:47:42

功能目录

在这里插入图片描述
1.CensorWords.txt文件为能过滤的词汇
具体内容略;
2.SensitiveWordFilter为工具类,具体实现过滤的代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;/*** @Author : Liuzz* @Description: 敏感词过滤 工具类* @Date : 2018/5/24  09:21* @Modified By :*/
public class SensitiveWordFilter {private StringBuilder replaceAll;//初始化private String encoding = "UTF-8";private String replceStr = "*";private int replceSize = 500;private String fileName = "CensorWords.txt";private List<String> arrayList;/*** 文件要求路径在src或resource下,默认文件名为CensorWords.txt** @param fileName 词库文件名(含后缀)*/public SensitiveWordFilter(String fileName) {this.fileName = fileName;}/*** @param replceStr  敏感词被转换的字符* @param replceSize 初始转义容量*/public SensitiveWordFilter(String replceStr, int replceSize) {this.replceStr = fileName;this.replceSize = replceSize;}public SensitiveWordFilter() {}/*** @param str 将要被过滤信息* @return 过滤后的信息*/public String filterInfo(String str) {StringBuilder buffer = new StringBuilder(str);HashMap<Integer, Integer> hash = new HashMap<Integer, Integer>(arrayList.size());String temp;for (int x = 0; x < arrayList.size(); x++) {temp = arrayList.get(x);int findIndexSize = 0;for (int start = -1; (start = buffer.indexOf(temp, findIndexSize)) > -1; ) {findIndexSize = start + temp.length();//从已找到的后面开始找Integer mapStart = hash.get(start);//起始位置if (mapStart == null || (mapStart != null && findIndexSize > mapStart))//满足1个,即可更新map{hash.put(start, findIndexSize);}}}Collection<Integer> values = hash.keySet();for (Integer startIndex : values) {Integer endIndex = hash.get(startIndex);buffer.replace(startIndex, endIndex, replaceAll.substring(0, endIndex - startIndex));}hash.clear();return buffer.toString();}/*** 初始化敏感词库*/public void InitializationWork() {replaceAll = new StringBuilder(replceSize);for (int x = 0; x < replceSize; x++) {replaceAll.append(replceStr);}//加载词库arrayList = new ArrayList<String>();InputStreamReader read = null;BufferedReader bufferedReader = null;try {read = new InputStreamReader(SensitiveWordFilter.class.getClassLoader().getResourceAsStream(fileName), encoding);bufferedReader = new BufferedReader(read);for (String txt = null; (txt = bufferedReader.readLine()) != null; ) {if (!arrayList.contains(txt))arrayList.add(txt);}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (null != bufferedReader)bufferedReader.close();} catch (IOException e) {e.printStackTrace();}try {if (null != read)read.close();} catch (IOException e) {e.printStackTrace();}}}public StringBuilder getReplaceAll() {return replaceAll;}public void setReplaceAll(StringBuilder replaceAll) {this.replaceAll = replaceAll;}public String getReplceStr() {return replceStr;}public void setReplceStr(String replceStr) {this.replceStr = replceStr;}public int getReplceSize() {return replceSize;}public void setReplceSize(int replceSize) {this.replceSize = replceSize;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public List<String> getArrayList() {return arrayList;}public void setArrayList(List<String> arrayList) {this.arrayList = arrayList;}public String getEncoding() {return encoding;}public void setEncoding(String encoding) {this.encoding = encoding;}
}

3.Demo测试


public class demo {public static void main(String args[]) {SensitiveWordFilter sw = new SensitiveWordFilter();
//        SensitiveWordFilter sw = new SensitiveWordFilter("CensorWords.txt");sw.InitializationWork();long startNumer = System.currentTimeMillis();String str = "这里是要过滤的内容,当里面含有txt文件的词汇时,就会用*****进行替换";System.out.println("被检测字符长度:" + str.length());str = sw.filterInfo(str);long endNumber = System.currentTimeMillis();System.out.println("耗时(毫秒):" + (endNumber - startNumer));System.out.println("过滤之后:" + str);}
}

http://chatgpt.dhexx.cn/article/FXLAi7kO.shtml

相关文章

JavaEE 使用Filter实现敏感词汇过滤器

动态代理实现敏感词汇过滤器 使用动态代理增强request的getParameter(),getParameterMap()和getParameterValues()这三个方法&#xff0c;以达到过滤敏感词汇的效果 ##步骤 创建敏感词汇的txt文件创建敏感词汇过滤器的Filter类创建测试类进行测试 定义敏感词汇的文件txt 定…

Java实现过滤敏感词汇

Java实现过滤敏感词汇&#xff1a; 使用动态代理模式&#xff0c;增强返回值类型&#xff0c;替换敏感词汇 代码如下&#xff1a; 1、敏感词汇过滤器 package com.it.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedRe…

Filter动态代理敏感词汇过滤

Filter敏感词汇过滤 对request对象的getParamater()、getParameterMap()和getParameterValues()这三个方法进行增强&#xff0c;产生一个新的request对象放行&#xff0c;传递代理对象&#xff0c;将新request对象传入 动态代理增强对象的功能 设计模式&#xff1a;通用的解决…

Filter过滤器|敏感词汇过滤

文章目录 一、需求及分析二、过滤器三、xml配置四、测试sevlet 一、需求及分析 (1)对录入的数据进行敏感词汇过滤。 (2)敏感词汇参考 敏感词汇.txt文档 (3)如果是敏感词汇&#xff0c;替换为"***"。 分析:使用代理模式对request对象进行增强&#xff0c;增强获取参数…

python过滤敏感词汇_Python过滤敏感词汇

1.replace过滤 最简单也是最直接的就是直接循环敏感词&#xff0c;然后使用replace过滤关键词&#xff0c;文章和敏感词少的时候还可以&#xff0c;多的时候效率就真的很一般了。 2.使用正则过滤 有两个技术要点&#xff0c; 1.使用Python正则表达式的re的sub()函数; 2.在…

Java Filter——敏感词汇过滤

Filter的简介 Filter也称之为过滤器&#xff0c;它是Servlet技术中最实用的技术&#xff0c;Web开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截&#xff0c;从而实现一些特殊的功能。例…

JavaEE之Filter过滤器、登录状态验证、敏感词汇过滤

Filter&#xff1a;过滤器 1. 概念&#xff1a; 生活中的过滤器&#xff1a;净水器,空气净化器web中的过滤器&#xff1a;当访问服务器的资源时&#xff0c;过滤器可以将请求拦截下来&#xff0c;完成一些特殊的功能。 过滤器的作用&#xff1a;一般用于完成通用的操作。如&a…

SpringBoot项目实现敏感词汇过滤

记录背景&#xff1a;SpringBoot项目实现敏感词汇过滤 一&#xff1a;敏感词汇文件放置位置 二&#xff1a;说明&#xff1a;如果txt文件不能编译&#xff0c;pom文件添加下面配置 <build><resources><resource><directory>src/main/resources</…

敏感词过滤的php代码,ThinkPHP敏感词汇过滤

如果内容中包含敏感词汇&#xff0c;则返回False&#xff0c;否则返回True。 很简单的代码。 请将文件放置于 "项目/ORG/SensitiveFilter.class.php"下。 其中 “ SensitiveThesaurus.php”是一个敏感词汇数组&#xff0c;大家可以任意添加内容。 1.[代码][PHP]代码&…

JavaWeb 敏感词汇过滤器

1&#xff0c;基本功能 在提交数据时&#xff0c;常常需要检查数据中是否含有敏感词汇&#xff0c;有的话&#xff0c;需要屏蔽敏感词汇 2&#xff0c;实现原理 我们可以使用Filter过滤器&#xff0c;对数据进行检查与处理&#xff0c;将处理完毕的数据放行。因此&#xff0c;…

Filter 敏感词汇过滤案例

文章目录 一、需求分析二、案例实现 一、需求分析 &#xff08;1&#xff09;对案例录入的数据进行敏感词汇过滤 &#xff08;2&#xff09;敏感词汇参考敏感词汇.txt &#xff08;3&#xff09;如果是敏感词汇&#xff0c;替换为 *** 可以确定 Filter 和 servlet 中的 reques…

5分钟搞定敏感词过滤!

函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩、免运维、高可靠的方式运行。通过函数工作流,开发者无需配置和管理服务器,只需关注业务逻辑,编写函数代码,以无服务器的方式构建应用,便能开发出一个弹性高可用的后…

基础编程题目集 7-32 说反话-加强版 (20分)

#include <stdio.h> //标准c&#xff0c;没有用c的string&#xff0c;这样首先读取字符串就是个问题了 #define MAX 500000 //先处理字符串&#xff0c;删除多余的空格&#xff0c;形成新字符串 //Hello World Here I Come int main() {char s; //指单独一个字符c…

PTA 7-32 说反话-加强版

思路&#xff1a; 读入字符串str&#xff0c;那么用output数组存储每个单词的首字母&#xff0c;及尾字母后一字母在字符串的下标。那么已知这两个数据便可以输出该单词。 考虑到逆序输出的需要&#xff0c;逆序读取字符串。 如字符串”#apple##“&#xff08;#表示空格&#…

C++ 1009 说反话(20 分)

注意点1:转载自:https://blog.csdn.net/u011421608/article/details/44591579 我们先来看一段输入流cin>>和getline混用的代码: #include<iostream> #include<string> using namespace std;int main() {int age;string name;cout<<"请输入年…

7-32 说反话-加强版

7-32 说反话-加强版&#xff08;20 分&#xff09; 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a; 测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成…

Sql Server char nchar varchar nvarchar 区别

一、 用快捷键AltF1 打开的表结构&#xff0c; 我们看到的length, nchar和nvarchar 需要除以2才是储存的真正长度 二 、 类型前缀的意思1.有var前缀的&#xff0c;表示是实际存储空间是变长的&#xff0c;varchar,nvarchar 所谓定长就是长度固定的&#xff0c;当输入的数据长度…

Sqlserver 中nchar(n)、varchar(n)、nvarchar(n)和nvarchar(max)的区别

nchar(n): 固定大小字符串数据。 n 用于定义字符串大小&#xff08;以双字节为单位&#xff09;&#xff0c;并且它必须是 1 到 4,000 之间的值。 存储大小为 n 字节的两倍。 varchar(n): 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间…

通过实战探索数据库中的char、varchar、varchar2、nvarchar2的部分区别

前言 注&#xff1a;本文的实践是在oracle数据库中进行的&#xff0c;主要基于字节与字符以及定长与变长方面考虑&#xff0c;探索这四个类型的部分区别 Oracle数据库中&#xff0c;char、varchar、varchar2、nvarchar2是我们常用到的数据类型 &#xff08;MySQL中没有varch…

nvarchar 和varchar区别

有时候设计字段的时候&#xff0c;碰到nvarchar和varchar时候&#xff0c;是有点犹豫。所以今天就来探个究竟把。 (一) varchar是非Unicode可变长度类型&#xff0c;nvarchar是Unicode编码可变长度类型 DECLARE name AS VARCHAR(50)我是中国人test SELECT name AS Name, DATAL…