Java 敏感词替换
在开发过程中,我们经常会遇到需要对敏感词进行过滤或替换的情况。敏感词的存在可能会影响用户体验,甚至引发一些不必要的麻烦。在 Java 中,我们可以通过一些方法来实现对敏感词的替换,保护用户信息安全。
敏感词过滤
敏感词过滤是指在用户输入文本中检测是否包含敏感词汇,并将其替换为其他符号或删除。在 Java 中,我们可以使用正则表达式来实现敏感词过滤。
下面是一个简单的敏感词过滤的示例代码:
public class SensitiveWordFilter {
public String filter(String text) {
String sensitiveWord = "敏感词";
String replacement = "***";
String regex = "\\b" + sensitiveWord + "\\b";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
return matcher.replaceAll(replacement);
}
public static void main(String[] args) {
SensitiveWordFilter filter = new SensitiveWordFilter();
String text = "这是一段包含敏感词的文本:敏感词";
String filteredText = filter.filter(text);
System.out.println(filteredText);
}
}
在上面的代码中,我们定义了一个 SensitiveWordFilter
类,其中包含一个 filter
方法用于过滤文本中的敏感词。我们通过正则表达式来匹配敏感词,并将其替换为指定的符号。
敏感词替换
除了简单的敏感词过滤外,有时候我们还需要对敏感词进行替换,而不是直接删除。这样可以保留原始文本的完整性,同时避免暴露敏感信息。
下面是一个敏感词替换的示例代码:
public class SensitiveWordReplace {
public String replace(String text) {
Map<String, String> sensitiveWords = new HashMap<>();
sensitiveWords.put("敏感词1", "***");
sensitiveWords.put("敏感词2", "###");
for (Map.Entry<String, String> entry : sensitiveWords.entrySet()) {
String sensitiveWord = entry.getKey();
String replacement = entry.getValue();
text = text.replaceAll("\\b" + sensitiveWord + "\\b", replacement);
}
return text;
}
public static void main(String[] args) {
SensitiveWordReplace replace = new SensitiveWordReplace();
String text = "这是一段包含敏感词的文本:敏感词1,敏感词2";
String replacedText = replace.replace(text);
System.out.println(replacedText);
}
}
在上面的代码中,我们定义了一个 SensitiveWordReplace
类,其中包含一个 replace
方法用于替换文本中的敏感词。我们使用一个 Map
来存储敏感词和对应的替换值,然后遍历进行替换操作。
敏感词检测
除了过滤和替换敏感词之外,有时候我们还需要检测文本中是否包含敏感词,以便做出相应的处理。在 Java 中,我们可以通过 Trie 树来实现敏感词的检测。
下面是一个使用 Trie 树实现敏感词检测的示例代码:
public class SensitiveWordDetection {
private TrieNode root = new TrieNode();
public void addSensitiveWord(String word) {
TrieNode node = root;
for (char c : word.toCharArray()) {
if (!node.containsKey(c)) {
node.put(c, new TrieNode());
}
node = node.get(c);
}
node.setEnd();
}
public boolean containsSensitiveWord(String text) {
TrieNode node = root;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (node.containsKey(c)) {
node = node.get(c);
if (node.isEnd()) {
return true;
}
} else {
node = root;
}
}
return false;
}
public static void main(String[] args) {
SensitiveWord