elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda con patrones en ER
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con patrones en ER  (Leído 2,745 veces)
shulneos

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Duda con patrones en ER
« en: 25 Octubre 2013, 20:45 pm »

Hola amigos, estoy diseñando un programa que lee cadenas y devuelve true o false si las acepta o no. La condición para que acepte las cadenas es que contengan una o más palabras concatenadas definidas. Estas son las palabras "TGATCA","TTCGAA","GGCC" Y "GGTACC", (por si a alguien le interesa son cuatro enzimas de ADN).

Bien pues para ello hago uso de la clase Matcher de este modo.

Código:
public static void main(String[] args) throws IOException {
//Validacion con Afd.
Afd automata = new Afd("adn.jff");
System.out.println("Introduzca una o varias cadenas separadas"
+ " por coma para su validación: \n");
Scanner consola = new Scanner(System.in);
String linea = consola.nextLine();
String[] listaCadenas = linea.split(",");
System.out.println("********Validación con Afd.********\n");
for (String cadena : listaCadenas) {
System.out.println("La cadena (" + cadena + ") ¿Es válida? "
+ ValidacionADN.esValida(automata, cadena));
if (ValidacionADN.esValida(automata, cadena) == false) {
System.out.println("estado: " + automata.getEstadoActual()
+ ", símbolo: " + automata.getSimboloActual());

}
}
//Validación con Matcher.
System.out.println("********Validacion con Matcher********");


Pattern patEnzimas= Pattern.compile("[[GGCC]*|[GGTACC]*|[TTCGAA]*|[TGATCA]*]+"); // ESTA ES LA LÍNEA QUE TENGO MAL


for (String cadena: listaCadenas){
Matcher matEnzimas= patEnzimas.matcher(cadena);
System.out.println("¿Es válida la cadena ("+cadena+")?"+matEnzimas.matches());
}

}

Mi pregunta es ¿Qué patrón debo pasarle para que me devuelva true si la cadena de entrada es una composición de una o más cadenas descritas anteriormente?





En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Duda con patrones en ER
« Respuesta #1 en: 25 Octubre 2013, 23:04 pm »

Yo tengo experiencia utilizando regex por alrededor de 4 años, y te recomiendo que dejes de utilizarlas. Yo en lo persona ya no la ocupo, y eso que la amaba con todo mi corazón. Razón??

  • Se dificulta la lectura de código a los integrante de un grupo
  • Se dificulta la corrección de las regex ya existente
  • Da cabida a muchísimos bugs, muchos bugs

El ultimo punto es el mas importante, cuando utilizas regex hay un muy alto porcentaje de tener bugs, y si utilizas muchas regex en un proyecto, al final terminaras cambiando todo el codigo y hacerlo sin utilizar regex.


Utiliza el método contains - http://www.tutorialspoint.com/java/lang/string_contains.htm

Saludos.


En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Duda con patrones en ER
« Respuesta #2 en: 4 Noviembre 2013, 16:10 pm »

Apoyo a Yoya, pero como todas las cosas tiene un pero.
DOCUMENTACIÓN, documentar el código sirve bastante.
Y aunque suene como matar una mosca con un cañón, uno puede utilizar una gramática más alta dentro de la Jerarquía de Chomsky para solucionar los problemas. (buscar Antlr, JavaCC, etc..)

Bueno el problema está en:
Pattern patEnzimas= Pattern.compile("[[GGCC]*|[GGTACC]*|[TTCGAA]*|[TGATCA]*]+");
LO ESTÁS DEFINIENDO MAL!
Al utilizar [] estás definiendo una clase o un grupo. Lo que hace es hacer match a lo que se encuentre definido dentro de los corchetes [] (así los llamamos acá).
en tu caso lo más correcto seria utilizar esto
Código:
((GGCC)*|(GGTACC)*|(TGATCA)*)+


Saludos!
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Duda con patrones en ER
« Respuesta #3 en: 4 Noviembre 2013, 20:48 pm »

Te digo que tengo alrededor de 4 años metido de cabeza con la regex, y al final me he dado cuenta que es mejor no utilizarlas... O si se llegaría a utilizar, que sea con datos estatico, nada dinámico. Y mucha persona igual lo afirman...

Sobre tu regex, esta mala compa porque utiliza el metacaracter * que hace el math si existe cero o mas coincidencia, y por lo tanto no va a pasar del primer math que es GGCC. Puedes hacer la prueba con TGATCA.

Siempre se tendrás que corregir las regex, mientras si utilizas otras formas quizás la tengas que modificar pero no por bugs en el funcionamiento.

Saludos.
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Duda con patrones en ER
« Respuesta #4 en: 4 Noviembre 2013, 21:28 pm »

¡Excelente!

Sabia que algo andaba mal, pero no sabia que era sin embargo como estaba con otro asunto no le realicé las pruebas necesarias.

Al parecer esta expresión (GGCC|GGTACC|TGATCA)+ soluciona tu problema, si no lo soluciona prueba acá primero http://gskinner.com/RegExr/

Bueno tu dices que tienes 4 años metido en la cabeza en Regex, te creo y apoyo tu punto de vista. A mi sin embargo me han ayudado bastante en este ultimo año en cualquier ámbito, aunque siempre trato de mantenerlas lo más simples posibles. (Es más fácil encontrar un bug evidente). Lo que si he trabajado bastante en este ultimo año con gramáticas, y las ER que utilizo son bastante simples en comparación a las tuyas (especulando).

Saludos!

PS: No entiendo porque no funciona... siendo que en mi cabeza compilaba. Aún sí me parece extraño mi primera corrección de la ER.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿sintaxis de los patrones?
PHP
brian_e 2 3,145 Último mensaje 19 Marzo 2009, 04:14 am
por [u]nsigned
Patrones ONOXXXX
Hacking Wireless
NesDj 5 8,985 Último mensaje 21 Enero 2012, 16:55 pm
por Anonymous250
Patrones de diseño
Java
YumeG 0 2,626 Último mensaje 13 Mayo 2013, 00:22 am
por YumeG
programas de patrones.
Hacking Wireless
jemez44 5 3,230 Último mensaje 15 Agosto 2013, 19:36 pm
por GOolden
Patrones :: DAO + VO
PHP
_RaSH_ 0 4,682 Último mensaje 8 Septiembre 2013, 05:20 am
por _RaSH_
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines