Primero pensemos en validar una contraseña, dejando de lado lo de trabajar con archivos txt.
Se puede hacer una clase con un método que se encargue específicamente de recibir un String y devolver verdadero/falso si cumple los 4 parámetros que lo valida como contraseña.
A su vez, cada parámetro, se puede comprobar con métodos específicos. Uno que se encargue de comprobar si hay al menos una mayúscula, otro para la minúscula, otro para buscar números, etc...
Si todos estos métodos retornan verdadero, es que la contraseña es válida.
¿Y como comprobar, por ejemplo, si un String contiene una mayúsucula?
Una forma rápida es recorrer cada carácter del String y obtener su código ASCII.
Si su código es un entero entre 65 y 90, que son los códigos ASCII de las mayúsculas (ver
tabla ASCII) es que se ha encontrado al menos una mayúscula y el método puede retornar TRUE.
También comprobamos el código 165, que es la Ñ mayúscula.
Para la minúscula, mismo proceso, pero con los códigos correspondientes a las minúsculas.
Para números, lo mismo:
Para los caracteres especiales, en este caso, los códigos de estos caracteres no son consecutivos y no nos va a servir comparar con mayor y menor que.
Habrá que usar un switch y entonces, nos da igual comprobar el código ASCII, o comprobar directamente los caracteres que buscamos:
Vale, tenemos cuatro métodos para los cuatro parámetros que ha de cumplir una contraseña.
Pues ahora usamos un método que reciba la contraseña a comprobar, se la pase a estos cuatro métodos y compruebe si TODOS retornan TRUE, en cuyo caso la contraseña es correcta.
Si alguno retorna FALSE, es que no se cumplen todos los parámetros y por tanto la contraseña no es válida.
Este método, es tan sencillo como esto:
Todos estos métodos los vamos a tener juntos en una clase, que podemos llamar
ValidaPassword (o como tu quieras)
Fíjate que todos los métodos los he declarado como
static. Esto es porque esta clase no va a representar ningún tipo de entidad (una Persona, un Perro, un Coche, un Hotel....) y por tanto no vamos a necesitar crear distintos objetos únicos a partir de esta clase.
Solo necesitamos que cumpla ciertas tareas, como validar una contraseña, así que podemos declarar sus métodos como
static y así llamarlos cuando queramos sin tener que instanciar un objeto.
Podemos hacer una prueba a ver si funciona con este sencillo main.
Y en pantalla veremos que distingue bien las contraseñas válidas de las que no:
Bueno, pues ahora ya somos capaces de determinar si una contraseña es válida o no.
Comprueba que entiendes todo lo que hemos hecho, si no es así, pregunta lo que sea.
Lo siguiente será hacer que obtenga las contraseñas de un archivo de texto.
Haz tu un intento, a ver qué consigues. No importa si no lo completas o te equivocas, lo que importa es intentarlo.
Habría que hacer que la clase
ValidaPassword tuviera un nuevo método donde reciba un String con la ruta del archivo de texto que ha de comprobar.
Que lea el archivo y que pase cada contraseña obtenida por el método que las valida.
Para simplificar, si quieres de momento no hagas lo de escribir las validas e inválidas en distintos archivos.
Haz solo que muestre en pantalla cada contraseña que tenga el archivo de texto y diga si es válida o no.
El archivo de texto, cada contraseña debería ocupar una línea separada, para que sea más sencillo.
Algo como esto: