estoy viendo expresiones regulares y escribi este codigo:
Código Java:
Ver original System.
err.
println("Se van a detectar los patrones <Puerto> y <Puerta>"); Scanner teclado
= new Scanner
(System.
in); cadena=teclado.nextLine();
Pattern patron = Pattern.compile(".*[Pp]uert[a|o].*");
Matcher m = patron.matcher(cadena);
if(m.find()){
patron=patron.compile(".*[p|P]uerto.*");
m=patron.matcher(cadena);
if(m.find()){
patron=patron.compile(".*[p|P]uerta.*");
m =patron.matcher(cadena);
if(m.find()){
System.
out.
print("<Puerto> y <Puerta>\n");} else{System.
err.
print("<Puerto>\n");} }
else{System.
err.
print(" <Puerta>\n");} }
}
el problema es que si recibe una cadena q tenga ambas palabras (puerto y puerta) NO me muestra el print de <puerto> y <puerta> sino el de la primera palabra que tenga la cadena... puerto o puerta, nuncam e muestra el otro y no entiendo cual es el problema :S
encima puse que me muestre si encuentra true o false cuando prueba con Puerta, me muestra true pero el if no se ejecuta(el de <puerto> y <puerta>)
edito:
lo cambie por esto y funciona
Código Java:
Ver original System.
err.
println("Se van a detectar los patrones <Puerto> y <Puerta>"); Scanner teclado
= new Scanner
(System.
in); cadena=teclado.nextLine();
Pattern patron = Pattern.compile(".*[Pp]uert[a|o].*");
Matcher m = patron.matcher(cadena);
if(m.find()){
patron=Pattern.compile(".*[p|P]uerto.*");
m=patron.matcher(cadena);
if(m.find()&&Pattern.compile(".*[pP]uerta.*").matcher(cadena).find()){
System.
out.
println("peurto y puerta"); }
else if(Pattern.
compile(".*[pP]uerto").
matcher(cadena
).
find()){System.
out.
print(" <Puerto>\n");} else{System.
out.
println("Puerta");} }
}
pero no deberia funcionar de la otra forma tambien?