2012-04-22 10 views
6

Me refiero a la herramienta de prueba señalados aquí http://docs.oracle.com/javase/tutorial/essential/regex/test_harness.htmlequivalencia canónica en el patrón

El único cambio que hice para la clase es que el patrón se crea de la siguiente manera:

Pattern pattern = 
     Pattern.compile(console.readLine("%nEnter your regex(Pattern.CANON_EQ set): "),Pattern.CANON_EQ); 

Como el tutorial en http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html Sugiero que ponga en el patrón o expresiones regulares como a\u030A y la cadena para que coincida con \u00E5, pero termina en No se encontró coincidencia. Vi ambas cuerdas como una pequeña caja 'a' con un anillo en la parte superior.

¿No he entendido correctamente el caso de uso?

Respuesta

7

El comportamiento que está viendo no tiene nada que ver con la bandera Pattern.CANON_EQ.

La lectura de entrada desde la consola no es lo mismo que un literal de cadena Java. Cuando el usuario (presumiblemente usted, probando esta bandera) escribe \u00E5 en la consola, la cadena resultante leída por console.readLine es equivalente a , no a "å". Ver por sí mismo: http://ideone.com/lF7D1

En cuanto a Pattern.CANON_EQ, se comporta exactamente como se describe:

Pattern withCE = Pattern.compile("^a\u030A$",Pattern.CANON_EQ); 
Pattern withoutCE = Pattern.compile("^a\u030A$"); 
String input = "\u00E5"; 

System.out.println("Matches with canon eq: " 
    + withCE.matcher(input).matches()); // true 
System.out.println("Matches without canon eq: " 
    + withoutCE.matcher(input).matches()); // false 

http://ideone.com/nEV1V

+2

Sí y no. Una cadena es una cadena es una cadena, pero tiene razón en el sentido de que una cadena leída desde la consola no necesita más escapes, mientras que una cadena literal necesita escaparse. –

+0

@AdamMihalcin buena corrección. He desarrollado mi respuesta un poco más, con una demostración para ilustrar la diferencia en escapar. –

+0

Gracias. Avanzando con el tutorial ahora :) – Mustafa

Cuestiones relacionadas