87 votes

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

Je veux changer cette phrase :

Et ça sera sa moitié.

A :

Et ca sera sa moitie.

Existe-t-il un moyen simple 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];

171voto

Rob Points 2658

Finalement, j'ai résolu le problème en utilisant la fonction Normalizer classe.

import java.text.Normalizer;

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

112voto

Ondrej Bozek Points 1988

Le moyen le plus simple et le plus sûr est peut-être d'utiliser StringUtils de Langage Apache Commons

StringUtils.stripAccents(String input)

Supprime les diacritiques (~= accents) d'une chaîne de caractères. La casse ne sera pas altérée. Par exemple, 'à' sera remplacé par 'a'. Notez que les ligatures seront laissées telles quelles.

StringUtils. stripAccents()

11voto

Zhuinden Points 3074

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

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

7voto

Tristan Richard Points 1050

Pour kotlin

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

5voto

hertzsprung Points 1529

En supposant que vous utilisez Java 6 ou une version plus récente, vous pouvez jeter un coup d'oeil à Normalizer qui peut décomposer les accents, puis utiliser une regex pour supprimer les accents combinés.

Sinon, vous devriez être en mesure d'obtenir le même résultat en utilisant ICU4J .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X