web-dev-qa-db-fra.com

Un moyen facile de supprimer les accents d'une chaîne Unicode?

Je veux changer cette phrase:

Et ça sera sa moitié.

À :

Et ca sera sa moitie.

Y a-t-il un moyen facile de faire cela en Java, comme je le ferais 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];
63
Rob

Enfin, j'ai résolu le problème en utilisant la classe 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;
}
128
Rob

Peut-être que le moyen le plus simple et le plus sûr consiste à utiliser StringUtils de Apache Commons Lang

StringUtils.stripAccents(String input)

Supprime les signes diacritiques (~ = accents) d'une chaîne. L'affaire ne sera pas modifiée. Par exemple, "à" sera remplacé par "a". Notez que les ligatures seront laissées telles quelles.

StringUtils . stripAccents ()

79
Ondrej Bozek

Je suppose que la seule différence est que j'utilise un + et pas un [] par rapport à la solution. Je pense que les deux fonctionnent, mais il vaut mieux l'avoir ici aussi.

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

En supposant que vous utilisez Java 6 ou plus récent, jetez un oeil à Normalizer , qui peut décomposer les accents, puis utilisez une expression rationnelle pour dépouiller les accents de combinaison.

Sinon, vous devriez pouvoir obtenir le même résultat en utilisant ICU4J .

5
hertzsprung

Pour kotlin

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