Java如何将字符串中的敏感词替换为相等数量的星号*,这也是我工作中遇到的问题,尝试了很多种方式最后采用这一种,在这里分享一下我的解决方式,方式简单,希望对大家有用。如果大家有什么好的方式也欢迎分享!
/**
* 过滤字符串中的敏感词汇
* @param content 文本
* @param sensitiveWord 敏感词汇
* @return
*/
public String filterSensitiveWords(String content, String sensitiveWord) {
if (content == null || sensitiveWord == null) {
return content;
}
//获取和敏感词汇相同数量的星号
String starChar = getStarChar(sensitiveWord.length());
//替换敏感词汇
return content.replace(sensitiveWord, starChar);
}
//大部分敏感词汇在10个以内,直接返回缓存的字符串
public static String[] starArr={"*","**","***","****","*****","******","*******","********","*********","**********"};
/**
* 生成n个星号的字符串
* @param length
* @return
*/
private static String getStarChar(int length) {
if (length <= 0) {
return "";
}
//大部分敏感词汇在10个以内,直接返回缓存的字符串
if (length <= 10) {
return starArr[length - 1];
}
//生成n个星号的字符串
char[] arr = new char[length];
for (int i = 0; i < length; i++) {
arr[i] = '*';
}
return new String(arr);
}
另外提醒,如果需要替换多个敏感词汇,请先把敏感词汇按照长度排序,先替换长度比较长的。防止出现长的敏感词被替换一半的情况,比如“我操你大爷”,“ 我操”这两个敏感词需要替换,如果先替换“我操”,那么将剩余“你大爷”三个字,感觉很奇怪