我是java正则表达式的新手。我写了以下代码来验证非数字编号。如果我们输入任何非数字数字,它应该返回false。对我来说,下面的代码总是返回false。这里有什么不对?
package regularexpression;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberValidator {
private static final String NUMBER_PATTERN = "\\d";
Pattern pattern;
public NumberValidator() {
pattern = Pattern.compile(NUMBER_PATTERN);
}
public boolean validate(String line){
Matcher matcher = pattern.matcher(line);
return matcher.matches();
}
public static void main(String[] args) {
NumberValidator validator = new NumberValidator();
boolean validate = validator.validate("123");
System.out.println("validate:: "+validate);
}
}
答案 0 :(得分:10)
来自Java文档:
matches方法尝试将整个输入序列与模式匹配。
您的正则表达式匹配单个数字,而不是数字。在+
之后添加\\d
以匹配或更多数字:
private static final String NUMBER_PATTERN = "\\d+";
作为旁注,您可以组合模式的初始化和声明,使构造函数不必要:
Pattern pattern = Pattern.compile(NUMBER_PATTERN);
答案 1 :(得分:2)
matches
“当且仅当整个区域序列与此匹配器的模式匹配时才返回true。”
字符串为3位数字,与模式\d
不匹配,表示“数字”。
相反,您需要模式\d+
,意思是“一个或多个数字”。这用字符串表示为"\\d+"