Java正则表达式返回false。

5

我是java正则表达式的新手。我编写了以下代码来验证非数字的数字。如果我们输入任何非数字的数字,它应该返回false。对我来说,下面的代码始终返回false。这里有什么问题?

包名称: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);
    }

}

你真的需要一个类来做这个吗?"123".matches("\\d+") 不够吗? - elias
是的,即使有那行代码,它也能正常工作。感谢您简化了这段代码。 - user414967
2个回答

10

来自Java文档:

matches方法尝试将整个输入序列与模式进行匹配。

您的正则表达式仅匹配单个数字,而非数字。在\\d后添加+以匹配一个或多个数字:

private static final String NUMBER_PATTERN = "\\d+";

顺带一提,你可以将模式的初始化和声明结合起来,从而使构造函数变得不必要:

Pattern pattern = Pattern.compile(NUMBER_PATTERN);

那并没有解释为什么结果是false。\d也匹配"123"(如果这个模式应该匹配数字,则应该是 "^\d+$")。 - Tomalak
1
@Tomalak 感谢您的留言 - 我添加了一份说明。 - Sergey Kalinichenko
啊,我明白为什么这里不需要使用 ^$ 了。谢谢。 - Tomalak

2

matches "返回 true 当且仅当整个区域序列与此匹配器的模式相匹配。"

该字符串是 3 位数字,不符合模式 \d,即“一个数字”的含义。

相反,您需要模式 \d+,表示“一个或多个数字”。在字符串中表示为 "\\d+"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接