1. ホーム

[解決済み】アクセント記号を除去して、文字列全体を通常の文字に変換する方法はありますか?

2022-03-30 10:55:20

質問

アクセントを取り除き、文字を規則正しくする良い方法はありますか? String.replaceAll() メソッドを使用して、文字を1つずつ置き換えてください。 例

入力します。 orčpžsíáýd

出力 orcpzsiayd

ロシアのアルファベットや中国のアルファベットのように、アクセントのある文字をすべて含む必要はない。

どのように解決するのですか?

使用方法 java.text.Normalizer を使用すると、この処理を行うことができます。

string = Normalizer.normalize(string, Normalizer.Form.NFD);
// or Normalizer.Form.NFKD for a more "compatible" deconstruction 

これで、すべてのアクセント記号と文字が分離されます。 あとは、それぞれの文字が文字であるかどうかを比較して、文字でないものを捨てればいいだけです。

string = string.replaceAll("[^\\p{ASCII}]", "");

テキストがユニコードである場合、代わりにこれを使用する必要があります。

string = string.replaceAll("\\p{M}", "");

ユニコードの場合 \\P{M} はベースグリフにマッチし \\p{M} (小文字)は各アクセントにマッチします。

ポインターをくれたGarretWilsonに感謝するとともに 正規表現.info は、素晴らしいユニコード・ガイドです。