5

私はJava正規表現の初心者です。非数字を検証するために次のコードを書きました。数字以外の数値を入力すると、falseが返されます。私にとって、以下のコードは常にfalseを返します。ここで何が問題なのですか?

パッケージ正規表現;

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);
    }

}
4

2 に答える 2

10

Javaドキュメントから:

matchesメソッドは、入力シーケンス全体をパターンと照合しようとします。

正規表現は、数値ではなく1桁に一致します。1つ以上の数字に一致するように+後に追加します。\\d

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

補足として、パターンの初期化と宣言を組み合わせて、コンストラクターを不要にすることができます。

Pattern pattern = Pattern.compile(NUMBER_PATTERN);
于 2012-07-24T16:28:59.360 に答える
2

matches「領域シーケンス全体がこのマッチャーのパターンに一致する場合にのみ、trueを返します。」

文字列は3桁ですが、パターンと一致しません\d。つまり、「1桁」を意味します。

\d+代わりに、「1桁以上」を意味するパターンが必要です。これは文字列で次のように表されます"\\d+"

于 2012-07-24T16:31:05.893 に答える