3

重複の可能性:
ńǹňñṅņṇṋṉ̈ɲƞᶇɳȵ-> nまたはUnicode文字から発音区別符号を削除
する文字列内の特殊文字を置き換える方法は?

のような文字列をフォーマット"I>Télé"したいと思い"itele"ます。アイデアは、文字列を小文字(完了)にし、空白(完了)、アクセント、または特殊文字(、、、、、、、など)を含めないようにすること>です。</%~é@ï

特殊文字の出現を削除してもかまいませんが、アクセントを削除する間は文字を保持したいと思います(私の例で行ったように)。これが私がしたことですが、すべてのé、è、ê、ëを「e」に置き換えるのが良い解決策ではないと思います。「i」、「a」などに対してもう一度やり直してから、すべてを削除するよりも特殊文字...

String name ="I>télé" //example
String result = name.toLowerCase().replace(" ", "").replace("é","e").........;

その目的は、Androidアプリのリソースに有効なファイル名を提供することです。他にアイデアがあれば、それを使用します。

4

3 に答える 3

16

このjava.text.Normalizerクラスを使用して、テキストを通常のラテン文字に変換し、その後に可能な場合は分音記号 (アクセント) を付けることができます。したがって、たとえば、1 文字の文字列"é"は 2 文字の文字列になります['e', {COMBINING ACUTE ACCENT}]

これを行うと、文字列は、アクセントのない文字、アクセント修飾子、および言及したその他の特殊文字の組み合わせになります。この時点で、ホワイトリストのみを使用して文字列内の文字をフィルター処理し、必要なものを保持できます ([A-Za-z0-9]目的によっては、正規表現のように簡単にすることもできます)。

アプローチは次のようになります。

String name ="I>télé"; //example
String normalized = Normalizer.normalize(name, Form.NFD);
String result = normalized.replaceAll("[^A-Za-z0-9]", "");
于 2012-07-18T08:21:18.180 に答える
1

次のようなことができます

String res = ""
for (char c : name.toCharArray()) {
    if (Character.isLetter(c) ||Character.isDigit(c))
        res += c    
}

//Normalize using the method below

http://blog.smartkey.co.uk/2009/10/how-to-strip-accents-from-strings-using-Java-6/

public static String stripAccents(String s) {    
    s = Normalizer.normalize(s, Normalizer.Form.NFD);   
    s = s.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
    return s;
}
于 2012-07-18T08:28:29.657 に答える
0

ASCII コードを使用してみてください。このリンクが役立つかもしれません

于 2012-07-18T08:20:17.103 に答える