アクセントを取り除き、文字列全体を通常の文字に変換する方法はありますか? 質問する

アクセントを取り除き、文字列全体を通常の文字に変換する方法はありますか? 質問する

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

入力:orčpžsíáýd

出力:orcpzsiayd

ロシア語のアルファベットや中国語のアルファベットのように、アクセント付きの文字をすべて含める必要はありません。

ベストアンサー1

使用java.text.Normalizerこれをあなたに代わって処理します。

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

これにより、すべてのアクセント記号が文字から分離されます。次に、各文字が文字であるかどうかを比較し、文字でないものを除外します。

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

テキストが Unicode の場合は、代わりに以下を使用する必要があります。

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

Unicode の場合、\\P{M}基本グリフと一致し、\\p{M}(小文字) は各アクセントと一致します。

指摘してくれたGarretWilsonに感謝します。正規表現.info素晴らしい Unicode ガイド。

おすすめ記事