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

标签 java string format

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

格式应为 2 个数字,后跟一个破折号、4 个数字、一个点,然后是 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.");
            }

        }

    }
}

最佳答案

我经常发布“不要使用正则表达式”的答案。但在这种情况下:使用 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.            

这个正则表达式被拆分只是为了解释它的各个部分。您可以将字符串文字写在一行中:

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

关于Java - 检查用户的串行代码格式是否有效的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40928578/

相关文章:

c - 在 C 中使用 strok 解析 NMEA 字符串

java - Java中使用printf的简单格式化问题

opengl - COLLADA是无效格式吗?

java - 关于安卓项目

java - 没有获得简单 java 程序的输出来找到最大素因数

java - 在运行时决定换行符

Java:包含关键短语的输出字符串

java - 用于访问 JDK 8 HotSpot JVM 中字符串池内容的实用程序

java - 打印字符串数组的替代元素

java - IntelliJ 中代码的自定义格式