Игнорировать SMS, если оно содержит ключевое слово

В моем приложении я должен отсканировать все пользовательские смс и отфильтровать его по нескольким ключевым словам. Для этого я могу использовать 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 только в том случае, если будет указан точный ключ, но в этом случае ключ может быть не точным. как я могу изменить этот метод?

1 ответ

Я не уверен, что понимаю вас очень хорошо, но дайте мне знать, если я что-то пропустил. Regex сделает работу:

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и Matcher вернется true если находит образец в bodyостальное вернется false,

Кроме того, вы можете использовать String.matches метод, как описано в комментариях.

Другие вопросы по тегам