2013-01-15 2 views
5

mit Wie Regex einer cyrillic Zeichenfolge zu machen, möchte ich es in dieser Weise verwenden, irgendwie:gibt ein Beispiel für cyirillic in regex java

String.replaceAll("Кириллица","")

Natürlich funktioniert es nicht. Was soll ich tun, damit es funktioniert?

Ok, ich sehe, dass die Methode funktioniert, aber es funktioniert nicht für mich. Wie kann ich überprüfen, warum die Methode nicht ausgeführt wird?

...

Hm, habe ich versucht, s1 = s1.replaceAll("[\\p{InCyrillic}]", ""); für die Saite, die ich durch die Sockel zur Auswahl zu haben. es funktioniert super, alle kyrillischen Zeichen verschwinden, einschließlich des Wortes "Экзамен", aber wenn ich versuche s1=s1.replaceAll("Экзамен","") passiert nichts.

Aber Methode s1=s1.replaceAll("Экзамен","") arbeiteten im gleichen Programm für eine statische Zeichenfolge in diesem Programm definiert. Ich nehme an, dass das Problem an falschem Zeichen liegt, aber ich kann immer noch nicht verstehen, was ich falsch mache. Der Zeichensatz der Zeichenfolge ist windows-1251. Ich versuchte, mit charset in Programm-Experiment (es ist jetzt JSP), Verfahren unter Verwendung von

System.setProperty("file.encoding", "windows-1251"); 
response.setCharacterEncoding("windows-1251"); 

versucht, die Zeichenfolge von einem Zeichensatz zu einem anderen umzuwandeln. Und es ändert sich nichts

+0

Was nicht funktioniert? Kannst du ein Beispiel geben? Es sollte keine Probleme geben. – Henry

+0

hier ist ein Beispiel: Ich habe eine Zeichenfolge c mit kyrillischen, die Экзамен Folge von Zeichen hat. Ich mache c = c.replaceAll ("Экзамен", ""); und erhalten Sie eine Zeichenfolge c = Введение в специальность (Б.3.2.1-ПикО) 60,3Экзамен – user1956641

+0

Nein, das Problem ist nicht über Tomcat oder Zeichensatz. Kann es sein, dass das Problem ist, dass ich in einem langen String ersetzen? – user1956641

Antwort

1

Genau dies versucht:

String s1 = "Введение в специальность (Б.3.2.1-ПиКО)60,3Экзамен"; 
String s2 = s1.replaceAll("Экзамен", ""); 
System.out.println(s2); 

Die Ausgabe lautet:

Введение в специальность (Б.3.2.1-ПиКО)60,3 
+0

hm, aber warum dann bekomme ich ein anderes Ergebnis ... Vielleicht Probleme mit Charset oder Tomcat ... Seltsame Sache ist, dass Methode nicht nur auf kyrillisch funktioniert. Aber ich sehe das Problem nicht. – user1956641

4

Es könnte klar sein, wenn Sie Ihr Ergebnis für den Fall zeigen @ Henrys Antwort. Ich vermute, dass das Problem in Zeichen oder Codierung. zu identifizieren, ist der String in kyrillisch Sie mit diesem Code können:

String s1 = "Экзaмен"; 
s1 = s1.replaceAll("[\\p{InCyrillic}]", ""); 
System.out.println(s1); 

Der Code alle kyrillischen Zeichen entfernen und Sie können ungültige codierte Zeichen identifizieren.

Wenn Ihr Ergebnis wie „a“ sein oder „e“ oder „ae“, Es bedeutet, dass lateinische Zeichen in der Zeichenfolge existiert, die Simular kyrillisch, so sollten Sie diese Regex ersetzen mit

s1 = s1.replaceAll("Экз[aa]м[ee]н", ""); 

wobei [a-ist kyrillisches Zeichen und a-ist lateinisches Zeichen] und so weiter.

Wenn Ihr Ergebnis wird als „Экзaмен“, das Problem bei der Codierung und ich hoffe, dass dieser Link helfen Ihnen

How to determine if a String contains invalid encoded characters