用于验证的布尔逻辑失败

时间:2017-11-17 03:20:08

标签: java validation

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语句时,我是否正在使用正确的语法?非常感谢帮助!

3 个答案:

答案 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');