Это мой код, и я понятия не имею, почему он возвращает false
"A123".matches("\\D+");
Это потому, что вы еще одна жертва среди десятков/сотен разработчиков Java, которые ежедневно .matches()
из-за того, что .matches()
неправильно.
Он попытается сопоставить весь ввод. Это не то, что вы хотите.
Вы должны пройти через Pattern
, Matcher
и .find()
вместо:
private static final Pattern NONDIGIT = Pattern.compile("\\D");
// Test whether there is any nondigit character in a string:
NONDIGIT.matcher(theString).find();
Особенно это следует делать, поскольку в любом случае .matches()
будет перекомпилировать Pattern
каждый раз; здесь у вас есть только один Pattern
.
Это должно быть:
"A123".matches("^\\d+$");
нижний регистр d
обозначает цифру ^
для начала строки и ^
для конца строки.
Вы можете попробовать следующее:
"A123".matches("[0-9]+")
Также, как вы отметили его как Java, существует альтернативный способ использования NumberUtil.isNumber(String str) из Apache, который может проверить это для вас.