Te recomendaria hacer uso de expresiones regulares (busca en google expresiones regulares en java o directamente "regex java" y sabras que digo)
Aca un codigo que hace lo que quieres, aunque se puede mejorar (y no lo he probado):
public boolean validarDominio
(String input
) { Pattern pattern1 = Pattern.compile("[A-Z]{2}[0-9]{3}[A-Z]{2}");
Pattern pattern2 = Pattern.compile("[A-Z]{3}[0-9]{3}");
return pattern1.matcher(input).matches() || pattern2.matcher(input).matches();
}
Vere tu codigo para ver que falla, pero desde ya te digo que no es muy "prolijo". (Luego edito este comentario para detallar tu code).
Olvidalo, no lo probare, ya encontre el error: Los if no terminan con ;
if(!(Funciones.esCadenaLetras(dominio.substring(0, 3))));
flag = false;
Eso esta mal, tendria que ser así:
if(!(Funciones.esCadenaLetras(dominio.substring(0, 3))))
flag = false;
Sin el ;
(Esto te paso en todos los if)Por cierto, no entiendo la necesidad del while
.
Te recomendaria juntar los if de para verificar letras y numeros y no es necesario que pongas el metodo entre parentesis, solo pon el !.
Interesante froma de usar switch y case, pero no creo que sea la mejor, directamente habria hecho un if. No soy muy amigo de switch y case a menos que sea un menu o algo por el estilo.
Aquí otra forma de expresar tu codigo mas ordenado:
boolean flag = true;
switch(dominio.length()){
case 6:
flag = esCadenaLetras(dominio.substring(0, 3)) &&
esCadenaNros(dominio.substring(3, 6));
break;
case 7:
flag = esCadenaLetras(dominio.substring(0, 2)) &&
esCadenaNros(dominio.substring(2, 5)) &&
esCadenaLetras(dominio.substring(5, 7));
break;
default:
flag = false;
}
if(!flag
) throw new Exception("Dominio invalido"); return flag;
}
Suerte con tu codigo!