实现过程:
先自己准备要一个特殊词词库.txt文件,放到resource根目录下
工具类:
package com.msis.micro.gp.business.app.mgr.utils;
import java.util.*;
/**
* @Author Amy Tang
* @Description: TODO
* @Date 2020/5/28 上午 11:22
*/
public class SensitivewordFilter {
private Map<?, ?> sensitiveWordMap = null;
public static int minMatchTYpe = 1; //最小匹配规则
public static int maxMatchType = 2; //最大匹配规则
/**
* 构造函数,初始化特殊词库
*/
public SensitivewordFilter(){
sensitiveWordMap = new SensitiveWordInit().initKeyWord("business/business-app-mgr/src/main/resources/SensitiveWords.txt");
}
/**
* 判断文字是否包含特殊字符
* @param txt 文字
* @param matchType 匹配规则 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;
}
/**
* 获取文字中的特殊词
* @param txt 文字
* @param matchType 匹配规则 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;
}
/**
* 替换特殊字字符
* @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;