2012-07-24 7 views
5

私は初心者からJava正規表現です。私は非桁数の検証のために次のコードを書いた。非数字の数字を入力すると、falseを返すはずです。私にとって以下のコードは常にfalseを返します。ここで何が間違っていますか?java正規表現帰りfalse

パッケージregularexpression; Javaドキュメントから

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

あなたは本当にクラスが必要ですか? '' 123 ".matches(" \\ d + ")'では十分ではありませんか? – elias

+0

Yaa ..本当にそういう線でも動作します。コードを簡素化してくれてありがとう。 – user414967

答えて

10

マッチ方法は、パターンに対する全入力配列と一致することを試みます。

正規表現は数字ではなく1桁に一致します。 matchoneする\\d+桁以上の数字を追加します。

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

注意点として、あなたはコンストラクタが不要になって、パターンの初期化と宣言を組み合わせることができます。

Pattern pattern = Pattern.compile(NUMBER_PATTERN); 
+0

なぜ結果が 'false'なのか説明していない。 '' \\ d "'は '' 123 "'にもマッチします。 (また、パターンが数字だけと一致する必要があるならば、 ''^\\ d + $ "'でなければなりません。) – Tomalak

+1

@Tomalak注釈をありがとう - 私は説明を追加しました。 – dasblinkenlight

+0

ああ、なぜここで '^'と '$'が不要なのか分かります。ありがとう。 – Tomalak

2

matches「場合はtrueを返し、このマッチャーのパターンとリージョンのシーケンス全体が一致する場合に限ります。

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

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