
contains()方法用于判断字符串中是否包含指定的字符或字符串。
public static void main(String[] args) {
String a = "敏感词";
String b = "我的敏感词";
System.out.println(b.contains(a));
if (b.contains(a)) {
System.out.println("有敏感词");
}
}
方案二:使用String类的indexOf()
indexOf()方法不仅能判断字符串中是否能包含某个字符,还可以返回对应的下标,而且能找出所有相同字符对应的下标。
public static void main(String[] args) {
String a = "敏感词";
String b = "我的敏感词";
System.out.println(b.indexOf(a));
if (b.indexOf(a) > 0) {
System.out.println("有敏感词");
}
}
注意:这两个方案有一个很大的问题是,随着敏感词数量的增多,敏感词检测的时间会呈线性增长。项目的敏感词数量只有几十个,使用这种方案不会存在太大的性能问题。但是如果项目中有成千上万个敏感词,使用这种方案就会很耗CPU了。
方案三:DAF有穷自动机算法算法DFA的算法,即Deterministic Finite Automaton算法,翻译成中文就是确定有穷自动机算法。它的基本思想是基于状态转移来检索敏感词,只需要扫描一次待检测文本,就能对所有敏感词进行检测,所以效率比方案一高不少。
具体实现代码:
controller类
@ApiOperation(value = "是否为敏感词", notes = "是否为敏感词")
@ApiImplicitParams({
@ApiImplicitParam(name = "token", value = "token令牌", required = false, paramType = "header"),
})
@ControllerLogger
@UnAuthentication
@PostMapping(value = "/isSensitive")
public JsonResult isSensitive(@ApiParam(name = "words", value = "字符串", required = true) @RequestParam String words,
@ApiParam(name = "type", value = "1商品拍品2昵称3店铺名", required = true) @RequestParam Integer type) {
JsonResult jsonResult = new JsonResult();
HashSet set = new HashSet<>();
//这里我的敏感词存在数据库 大家结合自己的业务需求改动 可以存在txt文件中或者excel
QueryFilter filter = new QueryFilter(DsSensitiveWords.class);
filter.addFilter("type=", type);
List list = dsSensitiveWordsService.find(filter);
for (DsSensitiveWords dsSensitiveWords : list) {
//从数据库中取出敏感词 且用set去重
set.add(dsSensitiveWords.getWords());
}
return jsonResult.setSuccess(true).setObj(SensitiveFilterUtil.checkTxt(words, set));
}
SensitiveFilterUtil类
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@SuppressWarnings({"unchecked", "rawtypes"})
public class SensitiveFilterUtil {
public static HashMap sensitiveWordMap;
public static void initContext(HashSet set) {
initSensitiveWordMap(set);
}
private static void initSensitiveWordMap(Set sensitiveWordSet) {
//初始化敏感词容器,减少扩容 *** 作
sensitiveWordMap = new HashMap(sensitiveWordSet.size());
Map
结果
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)