user8955350
user8955350

Reputation:

Boolean logic for validation is failing

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;
}

This is my validation method inside a big program, I need a validation that requires the user to input at least 6 characters, first two being letters, next three being digits, and the last character either a "B" or "N" right now it's not doing that. After some trial and error, the first two IF statements seem to be correct and work when I delete the 3rd if statement about substrings, am I using the correct Syntax here? Would really appreciate help!

Upvotes: 0

Views: 82

Answers (3)

Kevin Anderson
Kevin Anderson

Reputation: 4592

Instead of a cascade of ifs and negative logic, you can do the entire test more clearly in a single positive-logic expression:

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

Upvotes: 0

Chai T. Rex
Chai T. Rex

Reputation: 3020

Another way to solve it is to use the original code with:

} else if ( (rc.charAt(5) != 'B') && (rc.charAt(5) != 'N') ) {

You need both to be misses (i.e., use an && instead of an ||).

Upvotes: 0

Raju
Raju

Reputation: 147

Find below logic , it will work . Better to use regular expressions .

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;
}

Upvotes: 1

Related Questions