Maneira fácil de remover acentos de uma seqüência de caracteres Unicode?

Eu quero mudar esta frase:

Et ça sera sa moitié.

Para :

Et ca sera sa moitie.

Existe uma maneira fácil de fazer isso em Java, como eu faria em Objective-C?

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

Finalmente, resolvi usando a class Normalizer .

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

Talvez a maneira mais fácil e segura seja usar o StringUtils do Apache Commons Lang

 StringUtils.stripAccents(String input) 

Remove diacríticos (~ = acentos) de uma string. O caso não será alterado. Por exemplo, ‘à’ será substituído por ‘a’. Note que as ligaduras serão deixadas como estão.

StringUtils. stripAccents ()

Eu acho que a única diferença é que eu uso um + e não um [] comparado à solução. Eu acho que ambos funcionam, mas é melhor tê-lo aqui também.

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

Supondo que você esteja usando o Java 6 ou mais recente, convém dar uma olhada no Normalizer , que pode se decompor em acentos e, em seguida, usar um regex para remover os acentos combinados.

Caso contrário, você deve conseguir o mesmo resultado usando o ICU4J .

Para kotlin

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

obrigado

 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é.”);