【问题标题】:Ignore SMS if it contains a keyword如果 SMS 包含关键字,则忽略它
【发布时间】:2015-12-16 10:43:10
【问题描述】:

在我的应用程序中,我必须扫描所有用户短信并根据一些关键字对其进行过滤。为此我可以直接使用smsBody.contains(filterKey)。但假设过滤器键类似于 您已获得+Rewards,其中 应该有一些数字。即,您已获得 1000 奖励,如果此字符串出现在短信中,我必须拒绝。我在下面添加了我的代码

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,但在这种情况下,键可能不准确。 如何修改这个方法?

【问题讨论】:

标签: android regex filter ignore-case


【解决方案1】:

我不确定是否非常了解您,但如果我遗漏了什么,请告诉我。正则表达式将完成这项工作:

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 之间的任何整数,如果在body 中找到模式,Matcher 将返回true,否则,将返回false

此外,您可以使用 cmets 中解释的 String.matches 方法。

【讨论】:

  • 你为什么不解释为什么你发布的内容应该有效? 试试这个试试那个 - 真的,恕我直言,这不是最好的回答方式。
  • 我没有说删除。如果您想获得尽可能多的支持,我会在答案中添加更多解释。这是一个建议。如果你愿意,请拿走。你不必。仅代码答案通常会被标记并随后被删除。
  • @stribizhev 谢谢。
  • 好。现在看起来好多了,但我会避免使用“我注意到肯定”,因为它假定问题不清楚并且应该关闭而不是回答。
猜你喜欢
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
相关资源
最近更新 更多