2016-12-02 4 views
1

シリアル番号を特定の形式で入力するようにプログラムを作成しようとしていて、コードが有効かどうかを確認します。Java - ユーザーのシリアルコード形式が有効かどうかを確認するプログラム

フォーマットは2つの数字の後にダッシュ、4つの数字、1つのドット、4つの数字、2つの文字(注:a、b、cのみです)を指定します。有効な形式の

例:

31-0001.2341ac  
00-9999.0001cb 

文字列の長さは、形式よりも長い/短い場合(14文字の長さを合計)は無効表示されるはずです。同じこと、他の文字が使用されている場合、無効とも言われます。

これまでに行ったコードです。正確な指定された形式をどのように達成できるかはわかりません。誰かが助けてくれることを願っています。

import java.util.Scanner; 

    public class SerialCheck{ 
     public static void main (String[] args){ 

     Scanner sc = new Scanner(System.in); 

     System.out.print("How many serial numbers would you like to check: "); 
     int length = sc.nextInt(); 
     int valid = 0; 

     String[] sSerials = new String[length]; 

     for (int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.print ("Enter Serial " + (nCtr+1) + ": "); 
      sSerials[nCtr] = sc.next(); 
     } 

     System.out.println(); 
     System.out.println("The following were added: "); 
      for(int nCtr = 0; nCtr < length; nCtr++){ 
      System.out.println(sSerials[nCtr]); 
     } 

     System.out.println(); 
      for(int nCtr = 0; nCtr < length; nCtr++){ 
       for (int x = 0; x < sSerials[nCtr].length(); x++){ 
        char c = sSerials[nCtr].charAt(x); 

       if((sSerials[nCtr].charAt(x)!='a') || 
        (sSerials[nCtr].charAt(x)!='b') || 
        (sSerials[nCtr].charAt(x)!='c') || 
        (sSerials[nCtr].charAt(x)!='-') || 
        (sSerials[nCtr].charAt(x)!='.')){ 
        valid--; 
       } 
       else{ 
        valid++; 
       } 
      } 
      if (valid < 0 && sSerials[nCtr].length() != 14){ 
       System.out.println("The address is invalid."); 
      } 
      else{ 
       System.out.println("The address is valid."); 
      } 

     } 

    } 
} 

答えて

7

「正規表現を使用しないでください」という回答が頻繁に投稿されます。しかし、この場合:regular expressionsを使用してください。彼らはこの仕事のための正しいツールです。

boolean isValid = sSerials[nCtr].matches(
    "[0-9]{2}"  // Match 2 digits 
     + "-"   // Then a dash 
     + "[0-9]{4}" // Then 4 digits 
     + "\\."  // Then a dot (which must be escaped) 
     + "[0-9]{4}" // Then 4 digits 
     + "[abc]{2}" // Then 2 a, b or c.    

この正規表現は、部分的に分かれています。あなたは、1行に文字列リテラルを記述することができます。

boolean isValid = 
    sSerials[nCtr].matches("[0-9]{2}-[0-9]{4}\\.[0-9]{4}[abc]{2}"); 
+0

ありがとうございます! :)ちょうどフォローアップの質問。正規表現を使用して文字列形式で文字を追加することもできますか? ユーザのシリアルコードは、プログラムの長さが短いため無効と判断されたので、プログラムはシリアルを有効にするために必要な長さに先行ゼロを付加します。 – Andrew

+0

例:入力:32-1234.4abは32-1234.0004abに変換され、長さが0になります。 – Andrew

+0

いくつかのタイプの置換は可能ですが、そうではありません。 str.substring(0、8)+ "0000" .substring(0,14-str.length())+ str.substring(8) 'のように、' substring'を使うほうがずっと簡単です。申し訳ありませんが、数字をチェックしていませんが、うまくいけばあなたに正しいアイデアが与えられます。 –

0

あなたは(あなたの製品のためSeqial数)あなたに必要な文字列のための正規表現を構築するのに役立ちますregexr.comのようないくつかのウェブサイトやユーティリティを使用することができます。 java.util.regexパッケージを使用して識別するには、

リンクjava.util.regexは、perticularタイプの文字列をフィルタリングするために使用するすべての機能を公開します。

関連する問題