Игнорировать 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
метод, как описано в комментариях.