敏感词过滤
项目在用户提问时需要过滤掉恶意的js注入攻击以及一些涉及到广告,色情,脏话等敏感词汇需要过滤掉以保证我们网站的专业性和给用户整洁,专业的体验。
关于敏感词的过滤:我们采用利用3个指针结合字典树的算法。首先,提取出所有的敏感词,将敏感词构建成一颗字典树,利用一个指针指向字典树的root结点。然后将要过滤的字符串当做输入,利用两个指针来控制当前遍历的字符,初始时这两个指针都在首字符,如果没有遇到敏感词,这两个指针都往后走,如果发现了敏感词,其中一个指针不动,另外一个指针往后走,同时root结点的指针也顺着找到的这个敏感词往子节点走,如果匹配了敏感词,就将该敏感词在输出的StringBuilder中用”***”替代,不匹配的时候都将原字符串中的字符依次append即可。匹配以后将两个指针从当前匹配的敏感词末尾出发,继续向后找下一个敏感词,直到走到字符串的末尾,这个时候我们就认为这个过滤任务完成了。
关键的filter算法如下:
1 | /** |
完整的算法如下:
1 | package com.nowcoder.service; |