Estoy tratando de usar expresiones regulares para determinar qué formato ha aplicado el usuario al ingresar una entrada en un cuadro de texto.
Las expresiones regulares son los siguientes:¿Por qué estas expresiones regulares se ejecutan lentamente en Java?
(\\s?[" + alphabet + "]{9,9})+
Para determinar si la entrada es una o más cadenas de longitud 9 en un alfabeto determinado, posiblemente separadas por espacios en blanco.
(>[\\w\\s]+\\n[" + alphabet + "\\s]+)+
para comprobar si la entrada está en FASTA format
Las expresiones regulares se ejecutan terriblemente lento cuando se compara con . ¿Por qué es esto?
Pensé que esto podría deberse a que Java almacena todas las coincidencias potenciales (que no necesito en este momento), pero agregar ?:
en cada paréntesis rompe la expresión regular. ¿Cómo debe hacerse esto?
Gracias,
Martin
Edición 1: he podido reproducir este problema - que sólo ocurre en un ordenador. Esto podría sugerir algo incorrecto con esa configuración particular de máquina virtual.
Necesitamos algo más sólido, por lo que implementaremos esto de manera diferente. Elegí la respuesta de Joel como la correcta, ya que creo que algún caso especial en Pattern podría ser la causa.
¿Cuántos patrones está tratando de hacer coincidir con cada cadena de entrada? ¿Los patrones son dinámicos o estáticos? –
@Joel Solo existen estos dos patrones. Ellos son estáticos. El uso de String.matches provocará una compilación cada vez, pero incluso si se compara con los patrones, una sola vez lleva mucho tiempo (> 10s para una entrada de aproximadamente 300 caracteres) –
¿se puede definir "terriblemente lento"? –