The problem that I am having is that I can't get my Password Verification Program to check a string to ensure that, 1 of the characters is in upper case and one is in lower case, it will check the whole string for one of the other and print the error message based on which statement it is checking.
I have looked over this site and the internet for an answer and I am unable to find one. This is homework.
Below is my current code.
import java.util.Scanner; public class password { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); String password; String cont = "y"; char ch; boolean upper = false; boolean lower = false; System.out.println("Setting up your password is easy. To view requirements enter Help."); System.out.print("Enter password or help: "); password = stdIn.next(); ch = password.charAt(0); while (cont.equalsIgnoreCase("y")) { while (password.isEmpty()) { System.out.print("Enter password or help: "); password = stdIn.next(); } if (password.equalsIgnoreCase("help")) { System.out.println("Password must meet these requirements." + "\nMust contain 8 characters.\nMust contain 1 lower case letter." + "\nMust contain 1 upper case letter.\nMust contain 1 numeric digit." + "\nMust contain 1 special character !@#$%^&*\nDoes not contain the word AND or NOT."); password = ""; } else if (password.length() < 8) { System.out.println("Invalid password - Must contain 8 charaters."); password = ""; } else if (!(Character.isLowerCase(ch))) { for (int i=1; i<password.length(); i++) { ch = password.charAt(i); if (!Character.isLowerCase(ch)) { System.out.println("Invalid password - Must have a Lower Case character."); password = ""; } } } else if (!(Character.isUpperCase(ch))) { for (int i=0; i<password.length(); i++) { ch = password.charAt(i); if (!Character.isUpperCase(ch)) { System.out.println("Invalid password - Must have an Upper Case character."); password = ""; } } } else { System.out.println("Your password is " + password); System.out.print("Would you like to change your password? Y/N: "); cont = stdIn.next(); password = ""; } while (!cont.equalsIgnoreCase("y") && !cont.equalsIgnoreCase("n")) { System.out.print("Invalid Answer. Please enter Y or N: "); cont = stdIn.next(); } } } }
Check the ASCII value of each character for the following conditions: If the ASCII value lies in the range of [65, 90], then it is an uppercase letter. If the ASCII value lies in the range of [97, 122], then it is a lowercase letter. If the ASCII value lies in the range of [48, 57], then it is a number.
To check whether a character is in Lowercase or not in Java, use the Character. isLowerCase() method.
Using the isupper() function One way to verify for the uppercase letters is using the string library's isupper() function. If every character in current string is uppercase, this function returns True; otherwise, it returns False.
To determine if a String contains an upper case and a lower case char, you can use the following:
boolean hasUppercase = !password.equals(password.toLowerCase()); boolean hasLowercase = !password.equals(password.toUpperCase());
This allows you to check:
if(!hasUppercase)System.out.println("Must have an uppercase Character"); if(!hasLowercase)System.out.println("Must have a lowercase Character");
Essentially, this works by checking if the String is equal to its entirely lowercase, or uppercase equivalent. If this is not true, then there must be at least one character that is uppercase or lowercase.
As for your other conditions, these can be satisfied in a similar way:
boolean isAtLeast8 = password.length() >= 8;//Checks for at least 8 characters boolean hasSpecial = !password.matches("[A-Za-z0-9 ]*");//Checks at least one char is not alpha numeric boolean noConditions = !(password.contains("AND") || password.contains("NOT"));//Check that it doesn't contain AND or NOT
With suitable error messages as above.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With