2012-04-22 2 views
6

I Test-Harnisch beziehe mich hier aufgeführten http://docs.oracle.com/javase/tutorial/essential/regex/test_harness.htmlCanonical Gleichwertigkeit in Muster

Die einzige Änderung, die ich in die Klasse gemacht ist, dass das Muster wie unten erstellt:

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

Als Tutorial http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html schlägt vor, dass ich das Muster oder die Regex als a\u030A und Zeichenfolge, um als \u00E5 übereinzustimmen, aber es endet bei einem No Match gefunden. Ich sah, dass beide Saiten ein kleines "a" mit einem Ring an der Spitze sind.

Habe ich den Anwendungsfall nicht richtig verstanden?

Antwort

7

Das Verhalten, das Sie sehen, hat nichts mit der Pattern.CANON_EQ Flagge zu tun.

Eingabe gelesen von der Konsole ist nicht das gleiche wie ein Java-String-Literal. Wenn der Benutzer (vermutlich Sie, dieses Flag austesten) \u00E5 in die Konsole eingibt, entspricht die resultierende Zeichenfolge, die von console.readLine gelesen wird, "\\u00E5", nicht "å". Überzeugen Sie sich selbst: http://ideone.com/lF7D1

Was Pattern.CANON_EQ, verhält es sich genau, wie beschrieben:

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

Ja und nein. Eine Zeichenkette ist eine Zeichenkette ist eine Zeichenkette, aber Sie sind korrekt in dem Sinne, dass eine Zeichenkette, die von der Konsole gelesen wird, kein weiteres Entweichen benötigt, während ein Zeichenkettenliteral entkommt. –

+0

@AdamMihalcin gute Korrektur. Ich habe meine Antwort noch etwas konkretisiert, mit einer Demo, die den Unterschied in der Flucht verdeutlichen soll. –

+0

Danke. Mit dem Tutorial jetzt weitermachen :) – Mustafa