A ver si te sirve esto. Creo que he comprobado todos los casos.
Código:
public static int nivelPassword(String password) throws Exception{
int NIVEL_BAJO = 0;
int NIVEL_MEDIO = 1;
int NIVEL_ALTO = 2;
int size = password.length();
String minusculas = "abcdefghijklmnopqrstuvwxyz";
String mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String numeros = "0123456789";
String caracteresEspeciales = "@!¡#$%&/()=?¿<>-{}[]+*|\\";
boolean empiezaMinusculas = false;
boolean empiezaMayusculas = false;
boolean empiezaNumero = false;
boolean empiezaCarater = false;
boolean minusculasMayusculas = false;
boolean minusculasNumeros = false;
boolean mayusculasNumeros = false;
boolean variedadSimbolos = false;
//Primero comprueba la longitud. No importa que sean mayusculas o minusculas
if(size<7 || size>10)
throw new Exception("El tamaño tiene que estar entre 6 y 10");
//Comprobamos si el primer caracter es un numero, minuscula o mayuscula o caracter especial
if(!(minusculas.indexOf(password.charAt(0))<0))
empiezaMinusculas = true;
if(!(mayusculas.indexOf(password.charAt(0))<0))
empiezaMayusculas = true;
if(!(numeros.indexOf(password.charAt(0))<0))
empiezaNumero = true;
if(!(caracteresEspeciales.indexOf(password.charAt(0))<0))
empiezaCarater = true;
//Si empieza por un caracter raro, ya no hace falta saber mas
if(empiezaCarater)
return NIVEL_ALTO;
//Una vez que sabemos por que empieza, comprobamos si todos son iguales
if(empiezaMinusculas){
for(int i=0;i<size;i++){
//Si tiene minusculas y mayusculas
if(!(mayusculas.indexOf(password.charAt(i))<0)){
minusculasMayusculas = true;
}
//Si tiene minusculas y numeros
if(!(numeros.indexOf(password.charAt(i))<0)){
minusculasNumeros = true;
}
}
}
if(empiezaMayusculas){
for(int i=0;i<size;i++){
//Si tiene mayusculas y minusculas
if(!(minusculas.indexOf(password.charAt(i))<0)){
minusculasMayusculas = true;
}
//Si tiene mayusculas y numeros
if(!(numeros.indexOf(password.charAt(i))<0)){
mayusculasNumeros = true;
}
}
}
if(empiezaNumero){
for(int i=0;i<size;i++){
//Si tiene numeros y minusculas
if(!(minusculas.indexOf(password.charAt(i))<0)){
minusculasNumeros = true;
}
//Si tiene numeros y mayusculas
if(!(mayusculas.indexOf(password.charAt(i))<0)){
mayusculasNumeros = true;
}
}
}
//Ya sabes si tienes una mezcla de numeros y letras mayusculas o minusculas
//Si hay mezcla, alguno sera true, si no es BAJO
if(!mayusculasNumeros && !minusculasMayusculas && !minusculasNumeros)
return NIVEL_BAJO;
else{
//Coprobamos si hay algun caracter raro
for(int i=0;i<size;i++){
if(caracteresEspeciales.indexOf(password.charAt(i))>0){
variedadSimbolos = true;
}
}
//Si lo hay es ALTO
if(variedadSimbolos)
return NIVEL_ALTO;
//Si no MEDIO
else
return NIVEL_MEDIO;
}
}
Comprueba el array de caracteres especiales, que a lo mejor se me paso alguno
Entretenido ejercicio.