remover - replace java tildes
¿Manera fácil de eliminar acentos de una cadena Unicode? (6)
Esta pregunta ya tiene una respuesta aquí:
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;
}
Para kotlin
fun stripAccents(s: String): String
{
var string = Normalizer.normalize(s, Normalizer.Form.NFD)
string = Regex("//p{InCombiningDiacriticalMarks}+").replace(string, "")
return string
}
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
.
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é.");