¿Manera fácil de eliminar acentos de una cadena Unicode?

Quiero cambiar esta oración:

Et ça sera sa moitié.

A :

Et ca sera sa moitie.

¿Hay una manera fácil de hacer esto en Java, como lo haría en 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, lo resolví usando la clase Normalizer .

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

Quizás la forma más fácil y segura es usar StringUtils de Apache Commons Lang

 StringUtils.stripAccents(String input) 

Elimina signos diacríticos (~ = acentos) de una cadena. El caso no será alterado. Por ejemplo, ‘à’ será reemplazado por ‘a’. Tenga en cuenta que las ligaduras se dejarán como están.

StringUtils. stripAccents ()

Supongo que la única diferencia es que uso un + y no un [] comparación con la solución. Creo que ambos funcionan, pero es mejor tenerlo aquí también.

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

Suponiendo que está utilizando Java 6 o posterior, es posible que desee echar un vistazo a Normalizer , que puede descomponer los acentos, y luego utilizar una expresión regular para quitar los acentos combinados.

De lo contrario, debería poder lograr el mismo resultado usando ICU4J .

Para kotlin

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

gracias

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