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

文章目录

    • 业务场景
    • ️业务梳理
      • 小技巧
    • 完整代码
    • ️最后总结
      • 胖奥特曼悠闲躺着

业务场景

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

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

️业务梳理

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

小技巧

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

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

完整代码

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 WordUtil {

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

    static {
        //静态代码块加载敏感词库
        load("../../../../../../../../resources/file/sensitiveWord.txt");
    }

    /**
     * 从敏感文件中逐行读取,加载到敏感词 set中
     * @param filePath 文件路径
     */
    public static void load(String filePath) {
        if (CollectionUtils.isEmpty(sensitiveWords)) {
            try (BufferedReader reader = new BufferedReader(new FileReader(filePath));){
                String line;
                //逐行读取文件
                while ((line = reader.readLine()) != null) {
                    sensitiveWords.add(line);
                }
            } catch (FileNotFoundException e) {
                log.error("读取敏感词库文件错误,文件不存在");
            } catch (IOException e) {
                log.error("读取敏感词库文件错误,io问题");
            }
        }
    }


    /**
     * 判断传入文本中是否包含敏感词
     * @param word
     * @return
     */
    public static boolean containsSensitiveWord(String word) {
        Iterator<String> iterator = sensitiveWords.iterator();
        while (iterator.hasNext()) {
            String sensitiveWord = iterator.next();
            if (word.contains(sensitiveWord)) {
                log.error("匹配到敏感词"+sensitiveWord);
                return true;
            }
        }
        return false;
    }


    public static void main(String[] args) {

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


}

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

工作四年,关于过滤敏感词,我准备这样干_第1张图片

工作四年,关于过滤敏感词,我准备这样干_第2张图片

️最后总结

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

工作四年,关于过滤敏感词,我准备这样干_第3张图片

你可能感兴趣的:(java)