介意我问一个问题吗?你如何制作一个审查咒骂词的代码?例如 输入一个字符串:Holy Crap! 输出:神圣****! 你是如何在java中使用这种类型的程序的?
答案 0 :(得分:0)
天真(或强力)解决方案是创建Collection
个“禁用”单词,并替换输入字符串中的任何单词。但是,对于包含拼写错误的坏词,这不会对你有所帮助,因此它不是一个完美的解决方案。而且这个解决方案效率不高,因为它会为字典中的每个坏词扫描一次输入String。只有在输入字符串和坏字数很少时才应使用它。
String input = "....";
for (word : badWords) {
input = input.replace(word,"****"); // which can be improved to return a
// number of `*` matching that length of
// the bad word it replaces.
}
有更有效(和复杂)的方法来搜索坏词。例如,您可以将所有坏词存储在树中,然后,对于输入String中的每个单词,遍历树以查看该单词是否与任何坏单词匹配。这将允许您只扫描输入字符串一次,而不是一次扫描字典中的每个坏字。
让我们说你的坏词是“酒吧”,“吠叫”,“吟游诗人”和“坐”。你的树看起来像这样:
ROOT
/ \
b s
/ \
a i
/ \
r t
/\
k d
这是一个非常小的例子,如果你有很多坏词或输入文字很大,那么实现这样的东西才有意义。
现在,这里有一些你可以做的伪代码:
String[] inputs = input.split(" ");
for (String word : inputs) {
Node curr = ROOT; // begin at the root of the tree
boolean isBad = true;
for (int i = 0; i < word.length; i++) {
char c = word.charAt(i);
if (the curr node of the tree has a child whose char = c)
curr = that child node;
else {
isBad = false;
break; // current word is ok
}
}
if (isBad)
// replace the bad word that was just found
}
这只是一个部分示例,并未涵盖所有情况。
答案 1 :(得分:0)
您可以在服务器端(可能在属性文件中)维护所有此类单词的注册表,并针对此注册表测试所需的输入字段。如果输入的单词是注册表中维护的单词之一,请替换为*
。
答案 2 :(得分:0)
您需要查看Java.lang.String.replace()方法。
然后你学习REGEX。