2017-02-22 5 views
0
import java.util.Scanner; 
public class validAge 
{ 
    public static void main(String args[]) 
    { 
     Scanner scan = new Scanner(System.in); 
     String s = scan.nextLine(); 
     age(s); 

    } 
    public static void age(String s) 
    { 

     if(s.matches("[0-150]{1,3}")) 
     { 
      System.out.println("Age is valid"); 
     } 
     else 
     { 
      System.out.println("Age is NOT valid"); 
     } 
    } 
} 

(<...>)メソッド0の間の範囲にある、ユーザーが入力した値の年齢が有効と見なされていることを確認し、それがthe.matchesを使用する必要があります150.and必要があるとき入力された年齢が負の場合、ユーザ入力150+および同じ印刷文。これらのすべては、.match(< ..>)メソッドを使用して行う必要があります。 これは私がやったことです。は、私はそれが有効でない年齢を印刷するように作るカント

+0

なぜ正規表現が必要ですか?これは正規表現学習の運動ですか? – duffymo

答えて

2

正規表現が正しくありません。

あなたの条件は150

まで言うという事実によって複雑だ作品にあなたの問題をブレーク

  1. がnullチェックを行います。文字列が空またはnullの場合は、無効と言わなければなりません
  2. 最初の99年は簡単です:s.matches("[0-9]{1,2}")
  3. 問題は100-150をチェックしています。投稿したことはできません。正規表現を使ってどうやってチェックできますか?最初の桁は1でなければなりません。 2桁目は0-5でなければなりません。 3桁目は0-9でなければなりません。

多分、このような3桁目のパターン。あなたが0-99のためのものを持っていないので、それはオプションである必要があります。

"1[0-5][0-9]" 
+0

okは前に感謝します – brazil

+1

私は第3のパターンが100-159の範囲をチェックすると思います –

+1

おそらく正しくないでしょう。すべての詳細をチェックする時間はありません。回答は、OPがそれについて異なって考えるように導くことを意図しています。あなたのことを見て:同意して、それは良いです。 – duffymo

0

この短いスクリプトは、文字列の配列をテストします。コメントアウトされた行と条件が同じようにうまく機能します。あなたの質問では、[0-150] {1,3}は0,1,5だけを含む1から3桁の文字列に一致します。したがって、0,1,5,10,11,15、... 105,115,150。

(\ d {1,2})|(1 [0-4] \ d)| 150は、一連のグループとして範囲をカバーします。 \ d {1,2} - 任意の1桁の文字列または2桁の文字列を指定します。 1 [0-4] \ d - 1から始まる3桁の文字列、次に2桁目の0-4、最後に任意の数字を返します。 150 - 150

public static void main(String[] args) throws ParseException, IOException 
{ 
    String b[] = 
    { "0", "1", "2", "3", "150", "80", "90", "45", "100", "120", "200", 
      "-3", "-4", "151", "-1" }; 
    for (int ai = 0; ai < b.length; ai++) 
    { 
     // if(b[ai].matches("([0-9]?[0-9])|(1[0-4][0-9])|150")) 
     if (b[ai].matches("(\\d{1,2})|(1[0-4]\\d)|150")) 
     { 
      System.out.println("Age is valid " + b[ai]); 
     } 
     else 
     { 
      System.out.println("Age is NOT valid" + b[ai]); 
     } 
    } 
} 
+0

私は別のprogrameを持っています – brazil

+0

それはntがif文とマッチするならば有効ではありませんが、ifステートメントと一緒にelse文を実行すると同時に出力されますidontそれは起こっている@ProgrammersBlock – brazil

0

に一致するあなたの歓迎:

if(s.matches("^([0-9]|[1-9][0-9]|1[0-4][0-9]|150)$")) 
1

あなたの正規表現は、[0〜150]をかなり右を見ていないが、文字通り、0と1と50の間に何かをチェックします。

^(150|1[0-4][0-9]|[0-9]{1,2})$ 

この正規表現を使用してみてください。お役に立てれば。

+0

ok bhai私はそれを試してみる – brazil

関連する問題