JAVA过滤敏感词

  • O5_143133
    了解作者
  • 4KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-11 08:01
    上传日期
NULL 博文链接:https://uule.iteye.com/blog/2262385
test.zip
  • test
  • SensitiveWordInit.java
    4.5KB
  • SensitivewordFilter.java
    6KB
内容介绍
package com.common.test; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * @Description: ���дʹ��� * @Project��test * @Author : chenming * @Date �� 2014��4��20�� ����4:17:15 * @version 1.0 */ public class SensitivewordFilter { @SuppressWarnings("rawtypes") private Map sensitiveWordMap = null; public static int minMatchTYpe = 1; //��Сƥ����� public static int maxMatchType = 2; //���ƥ����� /** * ���캯���ʼ�����дʿ� */ public SensitivewordFilter(){ sensitiveWordMap = new SensitiveWordInit().initKeyWord(); } /** * �ж������Ƿ�������ַ� * @date 2014��4��20�� ����4:28:30 * @param txt ���� * @param matchType ƥ�����&nbsp;1����Сƥ�����2�����ƥ����� * @return �����true�����򷵻�false * @version 1.0 */ public boolean isContaintSensitiveWord(String txt,int matchType){ boolean flag = false; for(int i = 0 ; i < txt.length() ; i++){ int matchFlag = this.CheckSensitiveWord(txt, i, matchType); //�ж��Ƿ�������ַ� if(matchFlag > 0){ //����0���ڣ�����true flag = true; } } return flag; } /** * ��ȡ�����е����д� * @date 2014��4��20�� ����5:10:52 * @param txt ���� * @param matchType ƥ�����&nbsp;1����Сƥ�����2�����ƥ����� * @return * @version 1.0 */ public Set<String> getSensitiveWord(String txt , int matchType){ Set<String> sensitiveWordList = new HashSet<String>(); for(int i = 0 ; i < txt.length() ; i++){ int length = CheckSensitiveWord(txt, i, matchType); //�ж��Ƿ�������ַ� if(length > 0){ //����,����list�� sensitiveWordList.add(txt.substring(i, i+length)); i = i + length - 1; //��1��ԭ������Ϊfor������ } } return sensitiveWordList; } /** * �滻�������ַ� * @date 2014��4��20�� ����5:12:07 * @param txt * @param matchType * @param replaceChar �滻�ַ�Ĭ��* * @version 1.0 */ public String replaceSensitiveWord(String txt,int matchType,String replaceChar){ String resultTxt = txt; Set<String> set = getSensitiveWord(txt, matchType); //��ȡ���е����д� Iterator<String> iterator = set.iterator(); String word = null; String replaceString = null; while (iterator.hasNext()) { word = iterator.next(); replaceString = getReplaceChars(replaceChar, word.length()); resultTxt = resultTxt.replaceAll(word, replaceString); } return resultTxt; } /** * ��ȡ�滻�ַ� * @date 2014��4��20�� ����5:21:19 * @param replaceChar * @param length * @return * @version 1.0 */ private String getReplaceChars(String replaceChar,int length){ String resultReplace = replaceChar; for(int i = 1 ; i < length ; i++){ resultReplace += replaceChar; } return resultReplace; } /** * 检查文字中是否包含敏感字符,检查规则如下:<br> * @param txt * @param beginIndex * @param matchType * @return,如果存在,则返回敏感词字符的长度,不存在返回0 * @version 1.0 */ @SuppressWarnings({ "rawtypes"}) public int CheckSensitiveWord(String txt,int beginIndex,int matchType){ boolean flag = false; //敏感词结束标识位:用于敏感词只有1位的情况 int matchFlag = 0; //匹配标识数默认为0 char word = 0; Map nowMap = sensitiveWordMap; for(int i = beginIndex; i < txt.length() ; i++){ word = txt.charAt(i); nowMap = (Map) nowMap.get(word); //获取指定key if(nowMap != null){ //存在,则判断是否为最后一个 matchFlag++; //找到相应key,匹配标识+1 if("1".equals(nowMap.get("isEnd"))){ //如果为最后一个匹配规则,结束循环,返回匹配标识数 flag = true; //结束标志位为true if(SensitivewordFilter.minMatchTYpe == matchType){ //最小规则,直接返回,最大规则还需继续查找 break; } } } else{ //不存在,直接返回 break; } } if(matchFlag < 2 && !flag){ matchFlag = 0; } return matchFlag; } public static void main(String[] args) { SensitivewordFilter filter = new SensitivewordFilter(); System.out.println("敏感词的数量:" + filter.sensitiveWordMap.size()); String string = "情节,主法论人测试公尝试着去用某种方式渐渐的很潇洒地释自杀指南怀那些自己经历的伤感。"; //+ "然后法.轮.功 我们的扮演的角色就是跟随着主人测试公的喜红客联盟 怒哀乐而过于牵强的把自己的情感也附加于银幕情节中,然后感动就流泪," // + "难过就躺在某一个人的怀里尽情的阐述心扉或者手机卡复制器一个人一杯红酒一部电影在夜三.级.片 深人静的晚上,关上电话静静的发呆着。"; System.out.println("待检测语句字数:" + string.length()); long beginTime = System.currentTimeMillis(); Set<String> set = filter.getSensitiveWord(string, 1); long endTime = System.currentTimeMillis(); System.out.println("语句中包含敏感词的个数为:" + set.size() + "。包含:" + set); System.out.println("总共消耗时间为:" + (endTime - beginTime)); } }
评论
    相关推荐
    • CasseBrique:https
      CasseBrique:https
    • plaintextoffenders:https
      纯文字罪犯 向报告的域的公开列表
    • 使用socket post 数据到httphttps
      使用socket post 数据到httphttps
    • nodejs http-server开启https的证书
      https证书文件,nodejs http-server开启https的证书,可以直接在本地启动https的协议,方便部署和使用。
    • http https 切换
      http https切换代码,能够实现网站在传输信息的过程中不易遭人盗取
    • Http2Https-crx插件
      将书签中的http转换为https 害怕用https书签替换旧的http书签? 随着许多网站迁移到https,旧的http书签使星标图像为空。 搜索并转换为https! ****************************************************** ***********...
    • LocomotiveCMS https to http-crx插件
      语言:English 将登录网址从https替换为http以进行开发 此扩展程序供使用机车cms开发应用程序时供个人使用。 为了易于在开发模式下使用,此扩展程序将https登录网址替换为http
    • http:https的镜像
      框架HTTP
    • CookieIsolator:分离 HTTPHTTPS cookie
      松散隔离:HTTP cookie 只能在 HTTP 通道中发送,而 HTTPS cookie 可以在 HTTP(不带安全标志)和 HTTPS 通道中发送。 严格隔离:HTTP cookie 和 HTTPS cookie 只能分别在 HTTPHTTPS 通道中发送。 Ext Secure...
    • https协议
      NULL 博文链接:https://willwen.iteye.com/blog/1988199