用于对用户输入的内容进行过滤
public class SensitiveWordFilter {
private Map sensitiveWordMap = null;
public static int minMatchType = 1;//最小匹配规则
public static int maxMatchType = 2;//最大匹配规则
public SensitiveWordFilter(List<MgchglModel> sensitiveWord) {
sensitiveWordMap = new SensitiveWordInit().initKeyWord(sensitiveWord);
}
/**
*
* 说明:获取文字中的敏感词
* @param txt 文字
* @param matchType 匹配规则
* @return
*/
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;
}
@SuppressWarnings("rawtypes")
public int checkSensitiveWord(String txt,int beginIndex,int matchType) {
boolean flag = false;
int matchFlag = 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<1 || flag) {//敏感词,长度大于1
matchFlag = 0;
}*/
return matchFlag;
}
public static void main(String[] args) {
List<MgchglModel> sensitiveWord = new ArrayList<MgchglModel>();
MgchglModel model = new MgchglModel();
model.setSensitiveWords("测试");
MgchglModel model2 = new MgchglModel();
model2.setSensitiveWords("红客联盟");
sensitiveWord.add(model);
sensitiveWord.add(model2);
SensitiveWordFilter filter = new SensitiveWordFilter(sensitiveWord);
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));
}
}
结果: