import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class SensitiveFilterUtil {
public static HashMap sensitiveWordMap;
public static void initContext() {
HashSet<String> set = new HashSet<String>();
try {
Workbook workbook = new XSSFWorkbook(new FileInputStream("D:\\ty-logistics\\敏感词库表统计.xlsx"));
Sheet sheet = workbook.getSheetAt(0);
for (int j = 1; j <= sheet.getLastRowNum(); j++) {
Row row = sheet.getRow(j);
if (row == null) {
continue;
} else {
if(row.getCell(2)!=null) set.add(row.getCell(2).getStringCellValue());
}
}
initSensitiveWordMap(set);
} catch (Exception e) {
System.out.println("<<<<<<解析敏感词文件报错!");
e.printStackTrace();
}
}
private static void initSensitiveWordMap(Set<String> sensitiveWordSet) {
sensitiveWordMap = new HashMap<String,String>(sensitiveWordSet.size());
Map<Object,Object> temp;
Map<Object,Object> newWorMap;
for(String key:sensitiveWordSet) {
temp = sensitiveWordMap;
for (int i = 0; i < key.length(); i++) {
char keyChar = key.charAt(i);
Object wordMap = temp.get(keyChar);
if (wordMap != null) {
temp = (Map) wordMap;
} else {
newWorMap = new HashMap<>();
newWorMap.put("isEnd", "0");
temp.put(keyChar, newWorMap);
temp = newWorMap;
}
if (i == key.length() - 1) temp.put("isEnd", "1");
}
}
}
public static boolean contains(String txt) {
boolean flag = false;
for (int i = 0; i < txt.length(); i++) {
int matchFlag = checkSensitiveWord(txt, i);
if (matchFlag > 0) {
flag = true;
}
}
return flag;
}
private static int checkSensitiveWord(String txt, int beginIndex) {
boolean flag = false;
int matchFlag = 0;
char word;
Map nowMap = sensitiveWordMap;
for (int i = beginIndex; i < txt.length(); i++) {
word = txt.charAt(i);
nowMap = (Map) nowMap.get(word);
if (nowMap != null) {
matchFlag++;
if ("1".equals(nowMap.get("isEnd"))) {
flag = true;
}
} else {
break;
}
}
if (matchFlag < 2 || !flag) {
matchFlag = 0;
}
return matchFlag;
}
public static List getSensitiveWord(String txt) {
List sensitiveWordList = new ArrayList();
for (int i = 0; i < txt.length(); i++) {
int length = checkSensitiveWord(txt, i);
if (length > 0) {
sensitiveWordList.add(txt.substring(i, i + length));
i = i + length - 1;
}
}
return sensitiveWordList;
}
public static List checkTxt(String context) {
initContext();
return getSensitiveWord(context);
}
public static void main(String[] args){
System.out.println(checkTxt("卖淫嫖娼杀人犯法"));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律