public static boolean isValidReferenceCode(String rc) {
boolean validCode = true;
if (rc.length() != 6 ) {
validCode = false;
} else if ( !Character.isLetter(rc.charAt(0)) ||
!Character.isLetter(rc.charAt(1)) ||
!Character.isDigit(rc.charAt(2)) ||
!Character.isDigit(rc.charAt(3)) ||
!Character.isDigit(rc.charAt(4)) ||
!Character.isLetter(rc.charAt(5))) {
validCode = false;
} else if ( (!rc.substring(5).matches("B")) || (!rc.substring(5).matches("N")) ) {
validCode = false;
}
return validCode;
}
这是我在大程序中的验证方法,我需要验证,要求用户输入至少6个字符,前两个是字母,后三个是数字,最后一个字符是" B&# 34;或" N"现在它不这样做。经过一些试验和错误后,前两个IF语句似乎是正确的,当我删除关于子字符串的第3个if语句时,我是否正在使用正确的语法?非常感谢帮助!
答案 0 :(得分:1)
找到下面的逻辑,它会起作用。最好使用正则表达式。
public static boolean isValidReferenceCode(String rc) {
boolean validCode = true;
String pattern= "^[a-zA-Z]{2}[0-9]{3}[BN]}$";
if (rc.length() != 6) {
validCode = false;
}
validCode = rc.matches(pattern);
return validCode;
}
答案 1 :(得分:0)
另一种解决方法是使用原始代码:
} else if ( (rc.charAt(5) != 'B') && (rc.charAt(5) != 'N') ) {
你需要两者都是未命中的(即使用&&
而不是||
)。
答案 2 :(得分:0)
您可以在单个正逻辑表达式中更清晰地完成整个测试,而不是级联if
和负逻辑:
public static boolean isValidReferenceCode(String rc) {
return
rc.length() == 6 &&
Character.isLetter(rc.charAt(0)) &&
Character.isLetter(rc.charAt(1)) &&
Character.isDigit(rc.charAt(2)) &&
Character.isDigit(rc.charAt(3)) &&
Character.isDigit(rc.charAt(4)) &&
(rc.charAt(5) == 'B' || rc.charAt(5) == 'N');