import java.util.Scanner;

public class Passwort_Check {

    public static boolean checkLaenge(String passwort) {
        if (passwort == null) {
            return false;
        }
        // Abfrage mind. Anzahl
        return passwort.length() >= 20;
    }

    public static boolean checkKleinBuchstaben(String passwort) {
        if (passwort == null) {
            return false;
        } // Abfrage der Kleinbuchstaben
        return passwort.matches(".*[a-z].*[a-z].*[a-z].*");
    }

    public static boolean checkGrossBuchstaben(String passwort) {
        if (passwort == null) {
            return false;
        } // Abfrage der Grossbuchstaben
        return passwort.matches(".*[A-Z].*[A-Z].*[A-Z].*");
    }

    public static boolean checkZiffer(String passwort) {
        if (passwort == null) {
            return false;
        } // Abfrage der ZiffernS

        return passwort.matches(".*[0-9].*[0-9].*[0-9].*");
    }

    public static boolean checkSonderZeichen(String passwort) {
        if (passwort == null) {
            return false;
        }
        // Überprüfung mit Regex durch Ausschluss
        // [^A-Za-z0-9] Schließt alle ziffern und Buchstaben aus
        // Ausschlus der Steuerzeichen: 
        // [^/t] schließt Tab aus
        // [^/r] schließt Carriage Return aus
        // [^/n] schließt Line Feed aus
        // [^A-Za-z0-9\\x00-\\x1F\\x7F] [^A-Za-z0-9\t\r\n]
        String reg = "[\\x20-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E\\x80]";
        return passwort.matches(".*" + reg + ".*" + reg + ".*" + reg + ".*");
        // String negReg = "[^A-Za-z0-9\\x00-\\x1F\\x7F]";
        // return passwort.matches(".*"+negReg+".*"+negReg+".*"+negReg+".*");
        // return
        // passwort.matches(".*[^A-Za-z0-9\\x00-\\x1F\\x7F].*[^A-Za-z0-9\\x00-\\x1F\\x7F].*[^A-Za-z0-9\\x00-\\x1F\\x7F].*");
    }

    public static void main(String[] args) {
        String passwort = null;

        boolean check = false;
        Scanner in = new Scanner(System.in);
        System.out.println("Geben Sie ein Passwort zur überprüfung ein:");

        passwort = in.nextLine();
        do {

            if (!checkLaenge(passwort)) {
                System.out.println("Passwort ist zu kurz!");
            } else if (!checkKleinBuchstaben(passwort)) {
                System.out.println("Es fehlen Kleinbuchstaben!");
            } else if (!checkGrossBuchstaben(passwort)) {
                System.out.println("Es fehlen Großbuchstaben!");
            } else if (!checkZiffer(passwort)) {
                System.out.println("Es fehlen Ziffern!");
            } else if (!checkSonderZeichen(passwort)) {
                System.out.println("Es fehlen Sonderzeichen!");
            } else {
                System.out.println("Passwort ist sicher.");
                check = true;

            }
            if (check == false) {
                System.out.println("Geben Sie ein verbessertes Passwort zur überprüfung ein:");
                passwort = in.nextLine();
            }
        } while (check == false);

        System.out.println("...und Tschüss");
        in.close();
    }

}
