在Java中,过滤敏感词可以通过多种方法实现。下面是一个简单的示例代码,演示了如何使用正则表达式来过滤敏感词:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SensitiveWordFilter {
public static void main(String[] args) {
List<String> sensitiveWords = new ArrayList<>();
sensitiveWords.add("bad");
sensitiveWords.add("evil");
String text = "This is a bad text containing evil words.";
String filteredText = filterSensitiveWords(text, sensitiveWords);
System.out.println("Filtered Text: " + filteredText);
}
public static String filterSensitiveWords(String text, List<String> sensitiveWords) {
StringBuilder filteredText = new StringBuilder(text);
for (String word : sensitiveWords) {
String regex = "\\b" + Pattern.quote(word) + "\\b";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(filteredText);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
for (int i = start; i < end; i++) {
filteredText.setCharAt(i, '*');
}
}
}
return filteredText.toString();
}
}
在上述示例中,我们定义了一个敏感词列表`sensitiveWords`,并将要过滤的文本存储在变量`text`中。然后,我们定义了一个`filterSensitiveWords()`方法,接受文本和敏感词列表作为参数,并返回过滤后的文本。
在`filterSensitiveWords()`方法中,我们遍历敏感词列表,并为每个敏感词创建一个正则表达式。我们使用`\b`边界匹配符来确保只匹配完整的单词,使用`Pattern.quote()`方法来转义敏感词中的特殊字符,并使用`Pattern.CASE_INSENSITIVE`标志来忽略大小写。然后,我们使用`Matcher`对象在文本中查找敏感词的匹配项。如果找到匹配项,我们将匹配的字符替换为`*`。
在示例中,文本中的敏感词"bad"和"evil"将被替换为`*`。输出结果为:"This is a *** text containing **** words."
需要注意的是,上述示例仅演示了基本的敏感词过滤方法。实际上,敏感词过滤可能涉及更复杂的算法和数据结构,以提高过滤效率和准确性。此外,过滤敏感词可能也涉及到更多的规则和策略,如敏感词的替换规则、屏蔽策略等。具体的实现方式取决于你的需求和应用场景。