Java实现敏感字过滤
发布时间:2020-12-14 23:37:57 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util
|
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* 过滤敏感词,并把敏感词替换成*
*
*/
public class SensitiveWordUtils {
static ArrayList<String> first = new ArrayList<String>();
static String[] sortFirst;
static char[] charFirst;
static HashMap<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
static HashMap<String,String[]> sortMap = new HashMap<String,String[]>();
static HashMap<String,char[]> charMap = new HashMap<String,char[]>();
static ArrayList<String> temp;
static String key,value;
int length;
/**
* 带参数的构造函数
*
* @param keys
* 敏感词
* @param tContent
* 需要过滤的内容
*/
public SensitiveWordUtils(List<String> keys,String tContent) {
for (String k : keys) {
if (!first.contains(k.substring(0,1))) {
first.add(k.substring(0,1));
}
length = k.length();
for (int i = 1; i < length; i++) {
key = k.substring(0,i);
value = k.substring(i,i + 1);
if (i == 1 && !first.contains(key)) {
first.add(key);
}
// 有,添加
if (map.containsKey(key)) {
if (!map.get(key).contains(value)) {
map.get(key).add(value);
}
}
// 没有添加
else {
temp = new ArrayList<String>();
temp.add(value);
map.put(key,temp);
}
}
}
sortFirst = first.toArray(new String[first.size()]);
Arrays.sort(sortFirst); // 排序
charFirst = new char[first.size()];
for (int i = 0; i < charFirst.length; i++) {
charFirst[i] = first.get(i).charAt(0);
}
Arrays.sort(charFirst); // 排序
String[] sortValue;
ArrayList<String> v;
Map.Entry<String,ArrayList<String>> entry;
Iterator<Entry<String,ArrayList<String>>> iter = map.entrySet()
.iterator();
while (iter.hasNext()) {
entry = (Map.Entry<String,ArrayList<String>>) iter.next();
v = (ArrayList<String>) entry.getValue();
sortValue = v.toArray(new String[v.size()]);
Arrays.sort(sortValue); // 排序
sortMap.put(entry.getKey(),sortValue);
}
char[] charValue;
iter = map.entrySet().iterator();
while (iter.hasNext()) {
entry = (Map.Entry<String,ArrayList<String>>) iter.next();
v = (ArrayList<String>) entry.getValue();
charValue = new char[v.size()];
for (int i = 0; i < charValue.length; i++) {
charValue[i] = v.get(i).charAt(0);
}
Arrays.sort(charValue); // 排序
charMap.put(entry.getKey(),charValue);
}
}
/**
* 把敏感词替换成*
*
* @param content
* 需要过滤的内容
* @return 过滤完后的符合要求的内容
*/
public String replace(String content) {
String r = null,f,c = content;
String replacedword = content;
char g;
char[] temps;
int length = c.length();
for (int i = 0; i < length - 1; i++) {
g = c.charAt(i);
// 二分查找
if (Arrays.binarySearch(charFirst,g) > -1) {
tag : for (int j = i + 1; j < length; j++) {
f = c.substring(i,j);
g = c.charAt(j);
temps = charMap.get(f);
if (temps == null) { // 找到了
System.out.println("ok");
r = f;
String str = "";
for (int m = 1; m <= r.length(); m++) {
str = str + "*";
}
replacedword = c.replace(r,str);
c = replacedword;
break tag;
}
// 二分查找
if (Arrays.binarySearch(temps,g) > -1) {
if (j == length - 1) {
// print("find!");
System.out.println("find!");
r = c.substring(i,j + 1);
String str = "";
for (int m = 1; m <= r.length(); m++) {
str = str + "*";
}
replacedword = c.replace(r,str);
c = replacedword;
break tag;
}
} else { // 没有找到了
break;
}
}
}
}
return replacedword;
}
}
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
