我正在尝试创建一个程序,要求用户以特定格式输入序列号,该程序将验证代码是否有效。
格式应为 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/