Buenos dias,
Como puedo validar un correo electronico y lanzar una excepcion en el caso de que el usuario no incluya una @.
He creado la clase ExcepcionMail. En la clase principal pido que el usuario ingrese un email y he creado un metodo para pedirlo.
Muchas gracias.
/* Clase ExcepcionMail */
public class ExcepcionMail extends Exception {
public ExcepcionMail(String msg) {
super(msg);
}
}
/* Clase principal */
//En la clase principal pido que el usuario que ingrese un email.
String email = pedirEmail("Introduzca el EMAIL: ");
//Metodo pedirEmail
private String pedirEmail(String string) {
return null;
}
Hola,
Con una excepción propia (checked, para que el compilador te obligue a capturarla o declararla), el patrón queda así:
class ExcepcionMail extends Exception {
public ExcepcionMail(String mensaje) {
super(mensaje);
}
}
public void pedirEmail() throws ExcepcionMail {
Scanner sc = new Scanner(System.in);
System.out.print("Introduce tu email: ");
String email = sc.nextLine();
if (!email.contains("@")) {
throw new ExcepcionMail("El email debe contener una arroba");
}
System.out.println("Email valido: " + email);
}
Y en el método principal, como pedirEmail() declara throws ExcepcionMail, quien la llame tiene que capturarla:
public static void main(String[] args) {
try {
new TuClase().pedirEmail();
} catch (ExcepcionMail e) {
System.out.println("Error: " + e.getMessage());
}
}
Con contains("@") cubres el caso básico que pides. Si más adelante necesitas algo más riguroso (que haya algo antes y después de la arroba, un dominio con punto, etc.), lo normal es pasar a una expresión regular en vez de seguir encadenando comprobaciones con contains:
if (!email.matches("^[^@\s]+@[^@\s]+\.[^@\s]+$")) {
throw new ExcepcionMail("Formato de email invalido");
}
Pero para el ejercicio tal y como lo planteas, con el contains("@") es suficiente y más fácil de entender.
Sara