在我的应用中,我必须扫描所有用户短信并根据一些关键字对其进行过滤。因为我可以直接使用smsBody.contains(filterKey)
。但是假设过滤器密钥类似于 您已获得<> +奖励 其中<>应该有一些数字。即。 你已经获得了1000个奖励 ,如果这个字符串出现在sms我必须拒绝。我在下面添加了我的代码
if (!shouldIgnore(smsBody)) {
//further process
} else {
LogUtils.LOGD(TAG, "ignoring message : " + smsBody);
}
public boolean shouldIgnore(String body) {
ListIterator<String> listIterator =mList.listIterator()
while(listIterator.hasNext()){
String key = listIterator.next();
if(smsBody.contains(key)){
return true;
}
}
return false
}
String.contains()只有在确切的密钥出现时才会返回true,但在这种情况下,密钥可能不准确。 如何修改此方法?
答案 0 :(得分:2)
我不太了解你,但如果我错过了什么,请告诉我。正则表达式将完成这项工作:
public boolean shouldIgnore(String body) {
Pattern p = Pattern.compile("you have earned [0-9]+ Rewards");
Matcher m = p.matcher(body);
return m.find();
}
[0-9]+
查找you have earned
和Rewards
之间的任意整数,如果在true
中找到模式,匹配器将返回body
,否则将返回{{ 1}}。
此外,您可以使用false
方法,如评论中所述。