详细分析Java中的敏感词过滤(附Demo)

server/2024/11/14 21:53:48/

目录

  • 前言
  • 1. 简易Demo
  • 2. 进阶Demo

前言

敏感词直接过滤,有效防止敏感信息的上传

本文主要给一个启发的思路

1. 简易Demo

通过简易的Demo机制了解基本原理

java">import java.util.HashSet;
import java.util.Set;public class test {private Set<String> sensitiveWords;public test(Set<String> sensitiveWords) {this.sensitiveWords = sensitiveWords;}public String filter(String text) {for (String word : sensitiveWords) {text = text.replaceAll(word, "***"); // 替换敏感词为 ***}return text;}public static void main(String[] args) {// 构建敏感词库Set<String> sensitiveWords = new HashSet<>();sensitiveWords.add("敏感词1");sensitiveWords.add("敏感词2");sensitiveWords.add("敏感词3");// 创建敏感词过滤器test filter = new test(sensitiveWords);// 测试文本String text = "这是一个包含敏感词1和敏感词2的文本。";// 进行过滤String filteredText = filter.filter(text);// 输出过滤后的文本System.out.println("过滤后的文本:");System.out.println(filteredText);}
}

截图如下:

在这里插入图片描述

2. 进阶Demo

主要丰富敏感词的一些方法功能

java">import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;public class test {private Set<String> sensitiveWords;public test(Set<String> sensitiveWords) {this.sensitiveWords = sensitiveWords;}public String filter(String text) {for (String word : sensitiveWords) {text = text.replaceAll(word, "***"); // 替换敏感词为 ***}return text;}public boolean contains(String text, String word) {return text.contains(word);}public boolean findAll(String text) {for (String word : sensitiveWords) {if (text.contains(word)) {return true;}}return false;}public String findFirst(String text) {for (String word : sensitiveWords) {if (text.contains(word)) {return word;}}return null;}public String replace(String text, String replacement) {for (String word : sensitiveWords) {text = text.replace(word, replacement);}return text;}public String replaceChar(String text, char replacement) {for (String word : sensitiveWords) {text = text.replace(word, String.valueOf(replacement));}return text;}public boolean ignoreCase(String text, String word) {for (String sensitiveWord : sensitiveWords) {if (sensitiveWord.equalsIgnoreCase(word)) {return true;}}return false;}public boolean ignoreWidth(String text, String word) {for (String sensitiveWord : sensitiveWords) {if (text.contains(sensitiveWord) || text.contains(word)) {return true;}}return false;}public void config(Set<String> newSensitiveWords) {this.sensitiveWords = newSensitiveWords;}public static void main(String[] args) {// 构建敏感词库Set<String> sensitiveWords = new HashSet<>();sensitiveWords.add("敏感词1");sensitiveWords.add("敏感词2");sensitiveWords.add("敏感词3");// 创建敏感词过滤器test filter = new test(sensitiveWords);// 测试文本String text = "这是一个包含敏感词1和敏感词2的文本。";// 测试 contains 方法testContains(filter, text);// 测试 findAll 方法testFindAll(filter, text);// 测试 findFirst 方法testFindFirst(filter, text);// 测试 replace 方法testReplace(filter, text);// 测试 replaceChar 方法testReplaceChar(filter, text, '*'); // 传入替换字符// 测试 ignoreCase 方法testIgnoreCase(filter, text);// 测试 ignoreWidth 方法testIgnoreWidth(filter, text);// 测试 config 方法testConfig(filter, new HashSet<>(Arrays.asList("新敏感词1", "新敏感词2")));// 输出过滤后的文本System.out.println("过滤后的文本:");System.out.println(filter.filter(text));}private static void testContains(test filter, String text) {System.out.println("测试 contains 方法:");System.out.println("文本是否包含敏感词1? " + filter.contains(text, "敏感词1"));System.out.println("文本是否包含敏感词4? " + filter.contains(text, "敏感词4"));}// 添加其他测试方法...private static void testFindAll(test filter, String text) {System.out.println("测试 findAll 方法:");System.out.println("文本是否包含任何敏感词? " + filter.findAll(text));}private static void testFindFirst(test filter, String text) {System.out.println("测试 findFirst 方法:");System.out.println("文本中第一个敏感词是: " + filter.findFirst(text));}private static void testReplace(test filter, String text) {System.out.println("测试 replace 方法:");System.out.println("过滤后的文本: " + filter.replace(text, "***"));}private static void testReplaceChar(test filter, String text, char replacement) {System.out.println("测试 replaceChar 方法:");System.out.println("过滤后的文本: " + filter.replaceChar(text, replacement));}private static void testIgnoreCase(test filter, String text) {System.out.println("测试 ignoreCase 方法:");System.out.println("文本是否包含忽略大小写的敏感词? " + filter.ignoreCase(text, "敏感词1"));}private static void testIgnoreWidth(test filter, String text) {System.out.println("测试 ignoreWidth 方法:");System.out.println("文本是否包含忽略宽度的敏感词? " + filter.ignoreWidth(text, "敏感词1"));}private static void testConfig(test filter, Set<String> newSensitiveWords) {System.out.println("测试 config 方法:");filter.config(newSensitiveWords);System.out.println("已更新敏感词库。");}
}

截图如下:

在这里插入图片描述


http://www.ppmy.cn/server/29871.html

相关文章

Linux线程

线程概念 执行流 程序计数器中的下一条指令地址所组成的执行轨迹称为程序的控制执行流&#xff0c; 执行流就是一段逻辑上独立的指令区域&#xff0c;是人为给处理器安排的处理单元。指令是具备“能动性”的数据&#xff0c;因此只有指令才有“执行”的能力&#xff0c;它相当…

CAPM模型(Capital Asset Pricing Model)注意事项

1. CAPM模型是一个风险和回报的理论模型&#xff0c;用于计算资本资产的预期回报率。 2. CAPM模型的基本假设是市场上的风险资产可以被分为系统风险和非系统风险。系统风险是不可通过分散投资而消除的风险&#xff0c;而非系统风险可以通过分散投资而消除。 3. 根据CAPM模型&am…

TCP的三次握手过程

TCP是面向连接的、可靠的、基于字节流的传输层通信协议。 TCP是面向连接的协议&#xff0c;所以使用 TCP前必须先建立连接&#xff0c;而建立连接是通过三次握手来进行的。 TCP包头结构 在讲解三次握手的过程之前&#xff0c;我们先来看一下 TCP包的结构&#xff1a; TCP包…

IP纯净度对跨境电商有什么直接影响?

IP纯净度对跨境电商具有直接且深远的影响。在跨境电商的运作中&#xff0c;IP地址扮演着至关重要的角色&#xff0c;而IP纯净度则直接关系到跨境电商的网络安全性、访问效果以及业务竞争力。 第一点&#xff0c;纯净的IP地址对于提升跨境电商的网络安全性具有关键作用&#xf…

jvm 马士兵 01 JVM简介,class文件结构

01.JVM是什么 JVM是一个跨平台的标准 JVM只识别class文件&#xff0c;符合JVM规范的class文件都可以被识别

机器学习之基于Tensorflow(LSTM)进行多变量时间序列预测股价

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介&#xff1a;机器学习之基于TensorFlow&#xff08;LSTM&#xff09;进行多变量时间序列预测股价 一、项目…

pyqt拖入图片并显示

pyqt拖入图片并显示 介绍效果代码 介绍 像拖入文本一样&#xff0c;把图片拖入到窗体中显示。 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout from PyQt5.QtGui import QPixmap, QDragEnterEvent, QDropEvent from PyQt5.Q…

Java基础,每日两问(5.1.1)

Java三大特点&#xff1a; 跨平台性&#xff08;Platform Independence&#xff09;&#xff1a; Java通过“一次编写&#xff0c;到处运行”&#xff08;Write Once, Run Anywhere, WORA&#xff09;的理念实现了跨平台性。这主要归功于Java虚拟机&#xff08;JVM&#xff09;…