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 ガイド。