Я думаю, это потому, что метод find
находит единственное совпадение подстроки в вашем аргументе.Я бы порекомендовал методы matches
, которые проверяют соответствие полной строки:
public boolean checkPhoneNumberIsValid(String arg) {
return Pattern.matches("\\+[0-9]+", arg);
}
[0-9]+
означает одну или несколько цифр.Вы пропустили +
, поэтому вы только сопоставляли одну цифру в начале строки, используя метод find
.
Вы также можете увидеть метод Pattern.matches
здесь .
Однако, если вы действительно хотите использовать метод find
, вам придется использовать "\\+[0-9]+$"
для регулярного выражения, чтобы метод find
соответствовал полной строке.$
означает, что конец строки должен быть там.
Кроме того, если вы планируете вызывать checkPhoneNumberIsValid
, часто вам следует предварительно скомпилировать регулярное выражение, поскольку оно более эффективно, как указано здесь :
private static final Pattern PHONE_NUMBER_REGEX = Pattern.compile("\\+[0-9]+");
public boolean checkPhoneNumberIsValid(String arg) {
return PHONE_NUMBER_REGEX.matcher(arg).matches();
}