如何在Java中验证此字符串输入?
两个字母后跟三个数字和一个字母。最后一个字母只能是B代表企业帐户,N代表非企业帐户
这方面的一个例子是'JB213B'或'JB231N'。
编辑:是的,我现在正在使用正则表达式,谢谢。
虽然现在我提出如何实际进行验证,但这是我到目前为止所做的
System.out.println("Enter your reference");
String reference = keyboard.next();
String regex = "[A-Z]{2}[0-9]{3}[B|N]";
boolean match = reference.matches(regex);
while (!match)
{
System.out.println("That isn't a valid reference");
reference = keyboard.next();
match = reference.matches(regex);
}
答案 0 :(得分:3)
只是为了确保有人为非正则表达式的可能性而战:
public boolean isValid(String s) {
return s.length() == 6 &&
s.charAt(0) >= 'A' && s.charAt(0) <= 'Z' &&
s.charAt(1) >= 'A' && s.charAt(1) <= 'Z' &&
s.charAt(2) >= '0' && s.charAt(2) <= '9' &&
s.charAt(3) >= '0' && s.charAt(3) <= '9' &&
s.charAt(4) >= '0' && s.charAt(4) <= '9' &&
(s.charAt(5) == 'B' || s.charAt(5) == 'N');
}
答案 1 :(得分:3)
您可以使用matches()方法将字符串与正则表达式进行比较。
// Match A-Z twice, 0-9 three times, and B or N once
String myString = "JB213B";
String myPattern = "[A-Z]{2}[0-9]{3}[BN]{1}";
if(myString.matches(myPattern){
// Do continuing logic
} else {
// Do error logic
}
答案 2 :(得分:2)
您可以使用正则表达式实现此目的。
在这种情况下,表达式为^[A-Z]{2}[0-9]{3}[B|N]$
This是.matches()
类String
方法的参考。
同样,您也可以使用Pattern
类来查找匹配项。 This是对此的参考。
<强>用法:强>
String strToTest = "AB123B";
String pattern = "^[A-Z]{2}[0-9]{3}[B|N]$";
Pattern p = Pattern.compile(patern);
Matcher m = p.matcher(strToTest);
boolean b = m.matches();
效果比较:
哪个更好“使用正则表达式”或“使用字符串比较”?
这个问题总是有争议的。但我发现,了解需求的复杂性对每种情况都没有多大帮助。
如果需要许多字符串比较,可以通过使用正则表达式跳过,那么我会使用正则表达式。
但是还应该考虑使用多个和/或复杂的正则表达式会对性能产生影响,因为对正则表达式的评估对于编译器来说也是一个繁琐而复杂的过程(与字符串操作相比)。
另一方面,使用字符串比较也容易出错,因为我们直接处理索引并剥离不必要的部分。
答案 3 :(得分:2)
使用如下的正则表达式。
String st = "JB213B";
String regex= "[A-Z]{2}\\d{3}[BN]";
boolean match = st.matches(regex);