对于一项学校作业,我们被要求使用正则表达式和字符串的 matches() 方法制作一个简单的垃圾邮件过滤器。这两个词是垃圾邮件和伟哥。即使拼写为小写或大写、重复字母或字符之间有空格,它也应该有效。例如“”V i AA gggg RrR aA”或“xxxSPAMyyy”。
这就是我现在拥有的
if(Item.getSubject().matches("(?i).*s.*p.*a.*m.*") ||Item.getMessage().matches("(?i).*v.*i.*a.*g.*r.*a.*")){
return false;
}
它适用于上面显示的示例,但也适用于我不希望它工作的字符串。就像句子中的字符顺序正确一样。谁知道好的解决方案吗?
最佳答案
您可以对输入数据进行预处理或规范化,以使与正则表达式的匹配更加简单。例如,如果从输入中删除所有空格字符,则正则表达式将变得更加简单和可靠。在“Buy V i AA gggg RrR aA!!!”正常化之后将变成“BuyViAAggggRrRaA!!!”并且可以轻松地与“(?i).*v+i+a+g+r+a+.*”表达式匹配。当然,请记住,使用正则表达式永远不可能 100% 正确。
关于java - 使用正则表达式和匹配字符串方法的垃圾邮件过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46552677/