6

最近、StringUtils ライブラリで非常に役立つメソッドを見つけました。

StringUtils.stripAccents(String s)

特殊文字を削除して、それを ASCII の「同等のもの」に変換すると、たとえば ç=c などに非常に役立つことがわかりました。

現在、私は、ドイツ語以外の文字に対してのみ、そのようなことを行う必要があるドイツ人の顧客のために働いています。ウムラウトはそのままにしておく必要があります。その場合、 strinAccents は役に立たないことに気付きました。

誰かがそのようなことについて経験がありますか? 便利なツール/ライブラリ/クラス、または正規表現はありますか? そのような文字を解析して置換するクラスを作成しようとしましたが、すべての言語でそのようなマップを作成するのは非常に難しい場合があります...

任意の提案が適用されます...

4

3 に答える 3

3

カスタム関数を構築するのに最適です。次のようになります。文字の変換を回避したい場合は、2 つの文字列 (定数) 間の関係を削除できます。

private static final String UNICODE =
        "ÀàÈèÌìÒòÙùÁáÉéÍíÓóÚúÝýÂâÊêÎîÔôÛûŶŷÃãÕõÑñÄäËëÏïÖöÜüŸÿÅåÇçŐőŰű";
private static final String PLAIN_ASCII =
        "AaEeIiOoUuAaEeIiOoUuYyAaEeIiOoUuYyAaOoNnAaEeIiOoUuYyAaCcOoUu";

public static String toAsciiString(String str) {
    if (str == null) {
        return null;
    }
    StringBuilder sb = new StringBuilder();
    for (int index = 0; index < str.length(); index++) {
        char c = str.charAt(index);
        int pos = UNICODE.indexOf(c);
        if (pos > -1)
            sb.append(PLAIN_ASCII.charAt(pos));
        else {
            sb.append(c);
        }
    }
    return sb.toString();
}

public static void main(String[] args) {
    System.out.println(toAsciiString("Höchstalemannisch"));
}
于 2013-08-22T15:30:39.983 に答える
0

これにより、回避策が得られる場合があります。ここでは、言語を検出して特定のテキストのみを取得できます。

編集: 生の文字列を入力として使用し、言語検出をドイツ語にすると、ドイツ語の文字が検出され、残りは破棄されます。

于 2013-08-21T07:25:37.397 に答える