Java实战之敏感词过滤器

这篇文章主要介绍了Java实战之敏感词过滤器,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下

一、导包

本文的敏感词过滤器用在SpringBoot项目中,因此,首先需要在pom.xml文件中导入如下依赖

  org.springframework.bootspring-boot-starter-aop org.springframework.bootspring-boot-starter-thymeleaf org.springframework.bootspring-boot-starter-web org.springframework.bootspring-boot-devtoolsruntime org.springframework.bootspring-boot-starter-testtest org.apache.commonscommons-lang33.9

二、敏感词文件

在resources目录下,创建sensitive-word.txt,里面填入需要过滤的敏感词信息。

在这里插入图片描述
在这里插入图片描述

三、前缀树的实现

前缀树TrieNode以一个空节点为头结点,每个节点下包含若干子节点,不同节点代表不同字符。TrieNode 由两部分组成,首先是一个boolean变量,表示该结点是否为一个关键词的终结点。其次是该结点的子节点集合,在本文中,用HashMap存储子节点,key存储结点代表的字符,类型为Character,value为TrieNode,表示子节点。实现的代码如下。

 //前缀树 private class TrieNode{ //关键词结束标识 private boolean isKeywordEnd = false; //子节点 private Map subNodes = new HashMap<>(); //isKeywordEnd的get、set方法 public boolean isKeywordEnd() { return isKeywordEnd; } public void setKeywordEnd(boolean keywordEnd) { isKeywordEnd = keywordEnd; } //添加子节点 public void addSubNode(Character c,TrieNode node){ subNodes.put(c,node); } //获取子节点 public TrieNode getSubNode(Character c){ return subNodes.get(c); } } 

四、敏感词过滤器的实现

 @Component public class SensitiveFilter { // 替换符 private static final String REPLACEMENT = "***"; //根节点 private TrieNode rootNode = new TrieNode(); //bean的初始化方法,服务一启动,容器自动给bean执行此方法完成初始化 //此方法的目的是读取敏感词文件,构建敏感词前缀树 @PostConstruct public void init(){ try( InputStream is = this.getClass().getClassLoader().getResourceAsStream("sensitive-words.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); ){ String keyword; while((keyword=reader.readLine())!=null){ this.addKeyword(keyword); } }catch (IOException e){ logger.error("加载敏感词文件失败: " + e.getMessage()); } } //将一个敏感词添加到前缀树 private void addKeyword(String keyword){ TrieNode tempNode = rootNode; for (int i = 0; i  0x9FFF); } } 

到此这篇关于Java实战之敏感词过滤器的文章就介绍到这了,更多相关Java敏感词过滤器内容请搜索html中文网以前的文章或继续浏览下面的相关文章希望大家以后多多支持html中文网!

以上就是Java实战之敏感词过滤器的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java