2013-01-15 24 views
5

如何使一個cyrillic字符串的正則表達式使用cyirillic的一個例子,我想在某種程度上這一種方式來使用它:給在正則表達式的Java

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

當然這是行不通的。我該怎麼做才能使它工作?

好的,我看到該方法的工作原理,但它不適用於我。我如何檢查,爲什麼方法不執行?

...

嗯,我試圖用s1 = s1.replaceAll("[\\p{InCyrillic}]", "");的字符串我通過插座獲得。它工作的很好,所有西里爾字符消失,包括字"Экзамен",但如果我嘗試s1=s1.replaceAll("Экзамен","")沒有任何反應。

但方法s1=s1.replaceAll("Экзамен","")工作在同一個程序中用於在此程序中定義的靜態字符串。我想這個問題可能是由於錯誤的字符集,但我仍然不明白我做錯了什麼。字符串的字符集是windows-1251。我試圖與在節目的字符集進行實驗(它是由jsp現在),採用方法

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

試圖從一個字符集轉換到另一個字符串。並沒有什麼變化

+0

什麼不起作用?你能給個例子嗎?應該沒有問題。 – Henry

+0

這裏是一個例子:我有一個帶有西裏爾字母的字符串c,它具有字符序列的Экзамен序列。我做 c = c.replaceAll(「Экзамен」,「」); 並得到一個字符串c =Введениевспециальность(Б.3.2.1-ПиКО)60,3Экзамен – user1956641

+0

不,問題不在於tomcat或charset。它是如此的問題是,我在做一個長字符串替換? – user1956641

回答

1

只是嘗試這樣做:

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

輸出是:

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

hm,但爲什麼然後我得到另一個結果...也許問題與字符集,或Tomcat ... 奇怪的是,該方法不適用於西里爾文。但我沒有看到問題。 – user1956641

4

如果你表現出你的結果的情況下,@亨利的回答可能是清楚的。 我想這是在字符或編碼的問題。 要確定是西里爾字符串你可以用這個代碼:

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

的代碼將刪除所有西里爾字符,你可以找出無效編碼的字符。

如果你的結果會像「一」或「E」或「AE」,這意味着在字符串中存在的拉丁字符,這simular到西里爾文,所以你應該更換使用這個正則表達式

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

其中[a是西里爾字符,a是拉丁字符]等。

如果您的結果將是爲「Экзaмен」,在編碼的問題,我希望這種聯繫將幫助你

How to determine if a String contains invalid encoded characters