如果它包含关键字,请忽略SMS

时间:2015-12-16 10:43:11

标签: android regex filter ignore-case

在我的应用中,我必须扫描所有用户短信并根据一些关键字对其进行过滤。因为我可以直接使用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,但在这种情况下,密钥可能不准确。 如何修改此方法?

1 个答案:

答案 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 earnedRewards之间的任意整数,如果在true中找到模式,匹配器将返回body,否则将返回{{ 1}}。

此外,您可以使用false方法,如评论中所述。