2013-01-15 9 views
5

Jak zrobić regex o cyrillic ciąg, chcę, aby użyć go w tej sposób jakoś:dać przykład stosując cyirillic w regex Java

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

Oczywiście, że nie działa. Co mam zrobić, żeby to zadziałało?

Ok, widzę, że metoda działa, ale nie działa dla mnie. Jak mogę sprawdzić, dlaczego metoda nie jest wykonywana?

...

Hm, starałem się używać s1 = s1.replaceAll("[\\p{InCyrillic}]", ""); na ciąg otrzymuję za pośrednictwem gniazd. działa świetnie, wszystkie znaki cyrylicy znikają, w tym słowo "Экзамен", ale jeśli spróbuję, s1=s1.replaceAll("Экзамен","") nic się nie stanie.

Ale metoda s1=s1.replaceAll("Экзамен","") działa w tym samym programie dla ciągów statycznych zdefiniowanych w tym programie. Myślę, że ten problem może wynikać z niewłaściwego zestawu znaków, ale nadal nie mogę zrozumieć, co robię źle. Kod zestawu znaków to windows-1251. Próbowałem eksperymentować z charset w programie (jest teraz JSP), stosując metody

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

próbowali przekształcając ciąg z jednego zestawu znaków na inny. I nic się nie zmieni

+0

Co nie działa? Czy możesz dać przykład? Nie powinno być problemów. – Henry

+0

Oto przykład: Mam ciąg c z cyrylicą, który ma Экзамен sekwencję znaków. Robię c = c.replaceAll ("Экзамен", ""); i uzyskaj ciąg c = Введение в специальность (Б.3.2.1-ПиКО) 60,3Экзамен – user1956641

+0

nie, problem nie dotyczy tomcat lub charset. Czy to możliwe, że problem polega na tym, że robię zamiennik w długim sznurku? – user1956641

Odpowiedz

1

prostu próbowałem to:

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

Wyjście jest:

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

hm, ale dlaczego otrzymam inny wynik ... Może problemy z zestawem znaków lub Tomcat ... Dziwne jest to, że ta metoda nie działa tylko na cyrylicy. Ale nie widzę problemu. – user1956641

4

To może być wyraźnie jeśli pokażesz swój wynik w przypadku @ odpowiedź Henry'ego. Przypuszczam, że problem dotyczy znaków lub kodowania. celu identyfikacji jest String cyrylicą można z tym kodem:

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

kod usunie wszystkie cyrylicą i można zidentyfikować nieprawidłowe znaki zakodowane.

Jeśli wynik będzie jak „A” lub „E” lub „AE”, oznacza to, że w ciąg istnieć alfabecie łacińskim która simular cyrylica, więc należy zastąpić za pomocą tego wyrażenia regularnego

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

gdzie [a-jest cyrylicą a-jest łacińską postacią] i tak dalej.

Jeśli wynik będzie jako „Экзaмен”, w kwestii kodowania i mam nadzieję, że ten link pomoże Ci

How to determine if a String contains invalid encoded characters