1. 校验字符串不能小于8
  2. 校验数字通过Character.isDigit()方法
  3. 校验大写字母通过:Character.isLetter()和Character.isUpperCase()
  4. 校验小写字母通过:Character.isLetter()和Character.isLowerCase()
  5. 特殊字符:非数字、非字符串即可
  6. 重复字符串,通过两层循环,内层循环大于等于3时开始截取,并判断包含,为true则跳出

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String password = in.nextLine();
            if (password.length() < 8) {
                System.out.println("NG");
                continue;
            }
            boolean isDigit = false;
            boolean isUpperCase = false;
            boolean isLowerCase = false;
            boolean specialCharacter = false;
            boolean checksubStrErr = false;
            int checkNum = 0;
            char[] charArray = password.toCharArray();
            for (int i = 0; i < charArray.length; i++) {
                char val = charArray[i];
                if (Character.isDigit(val) && !isDigit) {
                    isDigit = Boolean.TRUE;
                    checkNum++;
                } else if (Character.isLetter(val) && Character.isUpperCase(val) && !isUpperCase) {
                    isUpperCase = Boolean.TRUE;
                    checkNum++;
                } else if (Character.isLetter(val) && Character.isLowerCase(val) && !isLowerCase) {
                    isLowerCase = Boolean.TRUE;
                    checkNum++;
                } else if (!Character.isDigit(val) && !Character.isLetter(val) && !specialCharacter) {
                    specialCharacter = Boolean.TRUE;
                    checkNum++;
                }

                for (int j = i; j < charArray.length; j++) {
                    if (j - i > 2) {
                        String substr = password.substring(i, j);
                        String otherStr = password.substring(j, password.length());
                        checksubStrErr = otherStr.contains(substr);
                    }
                    if (checksubStrErr) {
                        break;
                    }
                }
            }
            if ((checkNum < 3) || checksubStrErr) {
                System.out.println("NG");
                continue;
            }
            System.out.println("OK");
        }
    }
}