2016-04-09 12 views
0

ScannerSystem.in関数を使用してユーザー入力を検証して検証するJava正規表現を取得しようとしています。私が検証しようとしているのは、入力としてのみ文字を含むことができ、複数の単語を含むことができるユーザー入力です。たとえば、「Test1」と入力すると、入力する必要があることを警告するメッセージが表示され、入力するように促すメッセージが表示されます(「テスト1」)。私の正規表現を通過すると、それはスペースがこの問題を引き起こしているようだが、私の正規表現にスペースを追加することは私の問題を解決していない。どんな助けでも大歓迎です。以下は問題を抱えている私のコードのセクションです:JavaスキャナhasNext()文字列の正規表現の検証

System.out.println("Please enter the your name: "); 

while(!input.hasNext("[a-zA-Z]+")){ 

    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 

} 

String name = input.nextLine(); 

これは誰かに明らかに間違っているかもしれないが、私は、Javaに新しいと正規表現午前と間違って行くされていただきましたすべての日を見つけるためにしようとしています失敗。

ありがとうございます。

+0

試してみてください^^ [a-zA-Z_] * $それは簡単ですが、初心者が理解するのに十分です。 – TEK

+0

'^ [a-zA-Z_] + $'なので、空の文字列は使用できません。 – totoro

答えて

1

あなたがする必要があるのは、[]の内部にスペースを追加することだけです。また、私は(文字列の末尾のため)^を使用することをお勧めし(それは文字列の先頭でなければならない状態に)と$ます:

^[a-zA-Z ]+$ 

あなたはまた、タブのように、すべての空白を選択するには\sを使用することができます

あなたの完全なコード:

System.out.println("Please enter the your name: "); 

while(!input.hasNext("^[a-zA-Z ]+$")){ 
    System.out.println("Your name must consist of only letters"); 
    input.nextLine(); 
} 

String name = input.nextLine(); 

あなたは*のような記号を許可したい場合は、そのすべてBU tの番号。 \d+を使用できます。一致する場合はエラーを出力してください(whileステートメントの!を削除する必要があります)

+0

私は同じ答えを提案しようとしていましたが、うまくいきませんでした。私はこの同じコードを 'John Doe'でテストしてループを取り戻しました。理由は分かりません。 – Maljam

+0

私は同じですMaljamとして発行すると、私は一日中これを試してきましたが、スペースがあれば入力を検証するようには見えません。 []内にスペースが追加されていても、 "Test1"のような文字列でのみ動作し、 "Test1"では動作しません。 Druzionの提案に感謝します! – ChocolateDogBone

+0

@ChocolateDogBone '\ s'で試しましたか? – Druzion