首页 > 基础资料 博客日记

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

2024-07-17 03:00:06基础资料围观187

这篇文章介绍了详细分析Java中的敏感词过滤(附Demo),分享给大家做个参考,收藏Java资料网收获更多编程知识

前言

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

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

1. 简易Demo

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

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

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

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("已更新敏感词库。");
    }
}

截图如下:


文章来源:https://blog.csdn.net/weixin_47872288/article/details/138338412
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云