20

2 つの文字列を比較し、アクセントを無視して「noção」を「nocao」にする方法があるかどうかを知りたいです。string1.methodCompareIgnoreAccent(string2); のようなものになります。

4

2 に答える 2

7

これを行うためのメソッドは組み込まれていないため、独自に構築する必要があります。

これの一部はここからの解決策です。これは、最初にすべてのアクセント付き文字を対応する deAccented 文字に分割し、続いてそれらを結合する発音区別符号に分割します。次に、結合する分音記号をすべて削除します。https://stackoverflow.com/a/1215117/4095834も参照してください

そして、equals メソッドは次のようになります。

import java.text.Normalizer;
import java.text.Normalizer.Form;

public boolean equals(Object o) {
    // Code omitted
    if (yourField.equals(removeAccents(anotherField))) {
        return true;
    }
}

public static String removeAccents(String text) {
    return text == null ? null : Normalizer.normalize(text, Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
于 2015-03-03T14:48:11.777 に答える