Java - 检查用户的串行代码格式是否有效的程序

And*_*rew 1 java string format

我正在尝试创建程序,要求用户输入特定格式的序列号,程序将验证代码是否有效.

格式应为2个数字,后跟短划线,4个数字,一个点,然后是4个数字和2个字母(注意:接受的字母只有a,b,c).

有效格式示例:

31-0001.2341ac    
00-9999.0001cb
Run Code Online (Sandbox Code Playgroud)

如果字符串的长度比格式(长度为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.");
            }

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*ner 7

我经常发帖说"不要使用正则表达式".但在这种情况下:使用正则表达式.他们是这项工作的正确工具.

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.            
Run Code Online (Sandbox Code Playgroud)

这个正则表达式只是为了解释它的一部分而分开.您可以在一行中写入字符串文字:

boolean isValid =
     sSerials[nCtr].matches("[0-9]{2}-[0-9]{4}\\.[0-9]{4}[abc]{2}");
Run Code Online (Sandbox Code Playgroud)