5

文字列の正規表現を作成するcyrillic方法、何とかこの方法で使用したい:

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

もちろん、うまくいきません。それを機能させるために、私は何をすべきですか?

わかりました、メソッドが機能することがわかりましたが、私には機能しません。メソッドが実行されないのはなぜですか?

...

うーん、s1 = s1.replaceAll("[\\p{InCyrillic}]", "");ソケットに通す紐に使ってみました。それはうまく機能し、単語を含むすべてのキリル文字が消えます"Экзамен"が、試して s1=s1.replaceAll("Экзамен","")も何も起こりません。

ただし、メソッドs1=s1.replaceAll("Экзамен","")は、このプログラムで定義された静的文字列に対して同じプログラムで機能しました。その問題は間違った文字セットが原因である可能性があると思いますが、何が間違っているのかまだ理解できません。文字列の文字セットはwindows-1251. メソッドを使用して、プログラム(現在はjspです)でcharsetを試してみました

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

文字列をある文字セットから別の文字セットに変換しようとしました。そして何も変わらない

4

2 に答える 2

5

@Henryの回答の場合に結果を表示すると、より明確になる可能性があります。文字またはエンコーディングの問題だと思います。識別するには、次のコードでできるキリル文字の文字列です。

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

コードはすべてのキリル文字を削除し、無効なエンコードされた文字を識別できます。

結果が「a」、「e」、または「ae」のようになる場合は、文字列にキリル文字に似たラテン文字が存在することを意味するため、この正規表現を使用して置き換える必要があります

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

[a- はキリル文字、a- はラテン文字] などです。

結果が「Экзaмен」のようになる場合は、エンコードの問題です。このリンクが役立つことを願っています

文字列に無効なエンコード文字が含まれているかどうかを判断する方法

于 2013-01-16T07:47:31.357 に答える
1

これを試してみました:

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

出力は次のとおりです。

Введение в специальность (Б.3.2.1-ПиКО)60,3
于 2013-01-15T19:12:33.647 に答える