85

この文を変更したい :

Et ça sera sa moitié.

に :

Et ca sera sa moitie.

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];
4

6 に答える 6

165

最後に、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;
}
于 2013-03-03T20:58:52.087 に答える
111

おそらく、最も簡単で安全な方法は、ApacheCommonsLangから使用することですStringUtils

StringUtils.stripAccents(String input)

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

StringUtils。stripAccents()

于 2013-03-03T21:23:49.940 に答える
10

唯一の違いは、ソリューションと比較して+a ではなく aを使用することだと思います。[]どちらでもいいと思いますが、こちらもあったほうがいいです。

String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
于 2016-04-08T13:09:40.333 に答える
5

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

それ以外の場合は、 を使用して同じ結果を得ることができるはずですICU4J

于 2013-03-03T20:59:59.100 に答える
-5

ありがとうございました

public static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile(
                              "[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");

private static String stripDiacritics(String str) {
    str = Normalizer.normalize(str, Normalizer.Form.NFD);
    str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
    return str;
}

=> stripDiacritics("Et Ça sera sa moitié." );

于 2014-12-25T07:54:48.947 に答える