From 3d8ac071d378fb3826ab353522d6956fd1b8ec35 Mon Sep 17 00:00:00 2001 From: duhui Date: Sat, 27 Aug 2022 21:22:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/SensitivewordFilter.java | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/ljsd/SensitivewordFilter.java b/src/main/java/com/ljsd/SensitivewordFilter.java index 0146394..e235272 100644 --- a/src/main/java/com/ljsd/SensitivewordFilter.java +++ b/src/main/java/com/ljsd/SensitivewordFilter.java @@ -1,5 +1,8 @@ package com.ljsd; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.HashSet; import java.util.Iterator; import java.util.Map; @@ -10,6 +13,7 @@ import java.util.Set; * @Description: 敏感词过滤 */ public class SensitivewordFilter { + private static final Logger LOGGER = LoggerFactory.getLogger(SensitivewordFilter.class); @SuppressWarnings("rawtypes") private static Map sensitiveWordMap = null; public static final int minMatchTYpe = 1; //最小匹配规则 @@ -124,28 +128,41 @@ public class SensitivewordFilter { */ @SuppressWarnings({"rawtypes"}) public static int CheckSensitiveWord(String txt, int beginIndex, int matchType) { - boolean flag = false; //敏感词结束标识位:用于敏感词只有1位的情况 - int matchFlag = 0; //匹配标识数默认为0 + boolean flag = false;//敏感词结束标识位:用于敏感词只有1位的情况 + int matchFlag = 0;//匹配标识数默认为0 char word = 0; Map nowMap = sensitiveWordMap; + boolean logTest = txt.equals("色女") || txt.equals("av") || txt.equals("成人"); 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 { //不存在,直接返回 + if (logTest){ + LOGGER.info(nowMap.toString()); + } + //不存在,直接返回 + if (nowMap == null){ break; } + //存在,则判断是否为最后一个 + //找到相应key,匹配标识+1 + matchFlag++; + //如果为最后一个匹配规则,结束循环,返回匹配标识数 + if ("1".equals(nowMap.get("isEnd"))) { + //结束标志位为true + flag = true; + //最小规则,直接返回,最大规则还需继续查找 + if (SensitivewordFilter.minMatchTYpe == matchType) { + break; + } + } } - if (matchFlag < 1 || !flag) { //长度大于等于1,为词 + //长度大于等于1,为词 + if (matchFlag < 1 || !flag) { matchFlag = 0; } + if (logTest){ + LOGGER.info("=========================结果:{}",matchFlag); + } return matchFlag; }