工作四年,关于过滤敏感词,我准备这样干

简介: 工作四年,关于过滤敏感词,我准备这样干

📆 业务场景

提交订单评价时需要对评价内容进行判断,如果出现敏感词则提示修改

🔊这不就是写一个敏感词的校验工具类吗,小问题,说干就干

🖥️业务梳理

  1. 将敏感词存入数据库或者文件中
  2. 读取文件或数据库中敏感词,循环遍历敏感词,判断评价内容中是否包含敏感词,包含则提示报错

📌小技巧

读取文件时不需要每次都读取,用一个静态代码块坐初始化,读取完毕后放入jvm缓存

//敏感词库 通过jvm缓存
    private static final Set<String> sensitiveWords = new HashSet<>();
static {
   
   
    //静态代码块加载敏感词库
    load();
}

📇完整代码

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * 敏感词工具类
 * @author woniu
 * 2023-11-09
 */
@Slf4j
public class SensitiveWordUtil {
   
   

    //敏感词库 通过jvm缓存
    private static final Set<String> sensitiveWords = new HashSet<>();

    static {
   
   
        //静态代码块加载敏感词库
        load();
    }

    /**
     * 从敏感文件中逐行读取,加载到敏感词 set中
     */
    public static void load() {
   
   
        if (CollectionUtils.isEmpty(sensitiveWords)) {
   
   
            InputStream in = SensitiveWordUtil.class.getResourceAsStream("/file/word.txt");
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(in));){
   
   
                String line;
                //逐行读取文件
                while ((line = reader.readLine()) != null) {
   
   
                    sensitiveWords.add(line);
                }
            } catch (FileNotFoundException e) {
   
   
                log.error("读取敏感词库文件错误,文件不存在");
                throw new RuntimeException("读取敏感词库文件错误,文件不存在");
            } catch (IOException e) {
   
   
                log.error("读取敏感词库文件错误,io问题");
                throw new RuntimeException("读取敏感词库文件错误,io问题");
            }
        }
    }


    /**
     * 判断传入文本中是否包含敏感词
     * @param word
     * @return
     */
    public static void containsSensitiveWord(String word) {
   
   
        Iterator<String> iterator = sensitiveWords.iterator();
        while (iterator.hasNext()) {
   
   
            String sensitiveWord = iterator.next();
            if (word.contains(sensitiveWord)) {
   
   
                log.error("匹配到敏感词"+sensitiveWord);
                throw new RuntimeException("评价内容不符合规范,请检查");
            }
        }
    }


    public static void main(String[] args) {
   
   

        // boolean aa = containsSensitiveWord("转让");
        // boolean aa1 = containsSensitiveWord("转让");
        // boolean aa2 = containsSensitiveWord("转让");
        // boolean aa3 = containsSensitiveWord("转让");
        // boolean aa4 = containsSensitiveWord("转让");
    }


}

嗯,速度很快,可以下班了

image-20231109174535083

image-20231113113059583

image-20231109174655588

🖊️最后总结

🖲要熟练掌握技巧,一定多多练习:纸上得来终觉浅,绝知此事要躬行

胖奥特曼悠闲躺着

目录
相关文章
|
15天前
怎样设置邮件过滤?提升工作效率的必杀技
电子邮件过滤是一种智能化的管理工具,能自动分类邮件,屏蔽垃圾信息,优先显示重要邮件。设置过滤器通常包括指定关键词、发件人或域名,以便自动归档、删除或转发邮件。以Zoho Mail为例,用户可以通过进入设置,选择过滤器,然后新建规则来设定邮件处理方式。邮件过滤提高了效率,但需定期检查规则避免误删重要邮件。可以创建多个规则,并在更换邮箱服务商时重新设置过滤规则。
25 0
|
24天前
|
数据可视化 Go
快刀斩乱麻,二区7分今年9月发表,孟德尔随机化如何做药靶筛选?
该文章是2023年9月发表在《Journal of Translational Medicine》的孟德尔随机化研究,探索风湿性关节炎(RA)的潜在药物靶点。研究通过遗传学方法鉴定,发现7个可能的药物靶点,这些基因与免疫功能相关,有望为RA药物开发提供新方向,节省成本,并增加临床试验成功的可能性。分析过程包括MR分析、共定位、功能富集和药物预测等步骤。
21 0
|
3月前
|
数据库
个人日记系统,记录点滴小事,记录生活点点滴滴
个人日记系统,记录点滴小事,记录生活点点滴滴
17 0
|
11月前
|
前端开发 Shell 程序员
🙊整活向:定期给老板推送同事的代码量
总有领导想把公司往倒闭里整。但是每天推送每个人的代码量倒是挺有趣的,git log本身就自带这个功能,不来看看吗?
109 0
🙊整活向:定期给老板推送同事的代码量
|
12月前
|
数据采集 算法
拒绝想当然,不看文档导致GNE 的隐秘 bug
拒绝想当然,不看文档导致GNE 的隐秘 bug
74 0
|
SQL 安全 数据安全/隐私保护
|
开发框架 Java 测试技术
【测试基础】五、这样提bug单,开发小哥还会怼你么?
【测试基础】五、这样提bug单,开发小哥还会怼你么?
【测试基础】五、这样提bug单,开发小哥还会怼你么?
|
安全 算法 Java
[超长文,谨入]一文解决面试、工作遇到的安全性问题
安全问题其实是很多程序员容易忽略的问题但需要我们重视起来,提高应用程序的安全性。常出现的安全问题包括,程序接受数据可能来源于未经验证的用户,网络连接和其他不受信任的来源,如果未对程序接受数据进行校验,则可能会引发安全问题等等
278 0
[超长文,谨入]一文解决面试、工作遇到的安全性问题
一个查询功能居然被你玩出了花!(三)
上次是表单控件,这次是查询控件,不要弄混了哦。
|
JSON 数据库 数据格式
一个查询功能居然被你玩出了花!(一)
上次是表单控件,这次是查询控件,不要弄混了哦。
一个查询功能居然被你玩出了花!(一)