web-dev-qa-db-ja.com

Unicode文字列からアクセントを削除する簡単な方法は?

この文を変更したい:

Etçasera samoitié。

宛先:

その他の部分。

Objective-Cで行うように、Javaでこれを行う簡単な方法はありますか?

NSString *str = @"Et ça sera sa moitié.";
NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
63
Rob

最後に、Normalizerクラスを使用して解決しました。

import Java.text.Normalizer;

public static String stripAccents(String s) 
{
    s = Normalizer.normalize(s, Normalizer.Form.NFD);
    s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
    return s;
}
128
Rob

おそらく最も簡単で安全な方法は、 Apache Commons LangStringUtilsを使用することです

StringUtils.stripAccents(String input)

文字列から発音区別符号(〜=アクセント)を削除します。ケースは変更されません。たとえば、「à」は「a」に置き換えられます。合字はそのまま残されることに注意してください。

StringUtils . stripAccents()

79
Ondrej Bozek

唯一の違いは、ソリューションと比較して+ではなく[]を使用することです。どちらも機能すると思いますが、ここにもある方が良いでしょう。

String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
8
EpicPandaForce

Java 6以降を使用していると仮定すると、 Normalizer を調べて、アクセントを分解し、正規表現を使用して結合アクセントを取り除くことができます。

それ以外の場合は、 ICU4J を使用して同じ結果を達成できるはずです。

5
hertzsprung

コトリン用

fun stripAccents(s: String): String 
{
    var string = Normalizer.normalize(s, Normalizer.Form.NFD)
    string = Regex("\\p{InCombiningDiacriticalMarks}+").replace(string, "")
    return  string
}
3
Tristan Richard