Ответ 1
Наконец, я решил:
public static String stripAccents(String s)
{
s = Normalizer.normalize(s, Normalizer.Form.NFD);
s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
return s;
}
Я хочу изменить это предложение:
Et ça sera sa moitié.
To:
Et ca sera sa moitie.
Есть ли простой способ сделать это в Java, как я бы сделал в Objective-C?
NSString *str = @"Et ça sera sa moitié.";
NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
Наконец, я решил:
public static String stripAccents(String s)
{
s = Normalizer.normalize(s, Normalizer.Form.NFD);
s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
return s;
}
Возможно, самым простым и безопасным способом является использование StringUtils из Apache Commons Lang
StringUtils.stripAccents(String input)
Удаляет диакритические знаки (~ = акценты) из строки. Дело не будет изменено. Например, "а" будет заменено на "а". Обратите внимание, что лигатуры будут оставлены как есть.
StringUtils. stripAccents()
Предполагая, что вы используете Java 6 или новее, вы можете взглянуть на Normalizer
, который может разлагать акценты, а затем использовать регулярное выражение для разделения комбинационных акцентов.
В противном случае вы сможете добиться того же результата, используя ICU4J
.
Я думаю, единственное отличие состоит в том, что я использую +
, а не []
по сравнению с решением. Я думаю, что оба они работают, но лучше иметь его здесь.
String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
String accentRemoved = normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
Благодарю вас
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é." );