OVH Cloud OVH Cloud

Supprimer les accents d'un String

10 réponses
Avatar
MiXAO
Tout est dans le titre, je voudrais passer de "Déjà" à "Deja" par exemple.
Existe-t'il une fonction pour ça ou dois-je coder ma propre boucle ?

MiXAO

10 réponses

Avatar
yvon.thoravalNO-SPAM
MiXAO wrote:

Tout est dans le titre, je voudrais passer de "Déjà" à "Deja" par exemple.
Existe-t'il une fonction pour ça ou dois-je coder ma propre boucle ?


p'tet dans collator, qqc comme ça ???
--
yt

Avatar
MiXAO
Yvon Thoraval wrote:
MiXAO wrote:


Tout est dans le titre, je voudrais passer de "Déjà" à "Deja" par exemple.
Existe-t'il une fonction pour ça ou dois-je coder ma propre boucle ?



p'tet dans collator, qqc comme ça ???


C'était presque ça ;) Collator permet de comparer deux chaines.


Avatar
yvon.thoravalNO-SPAM
MiXAO wrote:


C'était presque ça ;) Collator permet de comparer deux chaines.


donc, collator, ne fait qu'implicitement la conversion :

chaine accentuée -> chaine non-accentuée.

ça manque à java ça (sur MacOS X c'est natif)
--
yt

Avatar
Thibal
Yvon Thoraval wrote:
MiXAO wrote:


C'était presque ça ;) Collator permet de comparer deux chaines.



donc, collator, ne fait qu'implicitement la conversion :

chaine accentuée -> chaine non-accentuée.

ça manque à java ça (sur MacOS X c'est natif)


Et en faisant un maChaine.toUpperCase().toLowerCase() ???


Avatar
yvon.thoravalNO-SPAM
Thibal wrote:

Et en faisant un maChaine.toUpperCase().toLowerCase() ???


faudrait essayer MAIS les uppercase ont AUSSI des accents...
--
yt

Avatar
nioubi
MiXAO wrote:
Existe-t'il une fonction pour ça ou dois-je coder ma propre boucle ?


Il est risqué d'affimer l'inexistence d'une méthode et pourtant je n'en
vois pas qui ferait ça.

Alors, sans tenir compte des encodages et locale, voici un contournement
possible :

private static final String avec = "âäàçéêëèîïôöûüù";
private static final String sans = "aaaceeeeiioouuu";

private static String tr(String s, String orig, String dest) {
for (int i = 0 ; i < orig.length () ; i++) {
s = s.replace(orig.charAt(i), dest.charAt(i));
} return s;
}

// s1 = tr(s, avec, sans);

Avatar
Real Gagnon
Tout est dans le titre, je voudrais passer de "Déjà" à "Deja" par
exemple. Existe-t'il une fonction pour ça ou dois-je coder ma propre
boucle ?


Voir http://www.rgagnon.com/javadetails/java-0456.html
mais ca utilise sun.text.Normalizer ...

Bye.
--
Real Gagnon from Quebec, Canada
* Looking for Java or PB snippets ? Visit Real's How-to
* http://www.rgagnon.com/howto.html

Avatar
Thibal
Yvon Thoraval wrote:

Thibal wrote:


Et en faisant un maChaine.toUpperCase().toLowerCase() ???



faudrait essayer MAIS les uppercase ont AUSSI des accents...


Bah voui c'était juste une suggestion, faut tester...


Avatar
James Kanze
Yvon Thoraval wrote:
Thibal wrote:


Et en faisant un maChaine.toUpperCase().toLowerCase() ???



faudrait essayer MAIS les uppercase ont AUSSI des accents...


On l'espèrerait, quand même. Sans parler du fait qu'avec une
procédure pareille, on perd les cases initiales ; mon adresse
deviendra « 9 pl. pierre sémard ».

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
James Kanze
nioubi wrote:
MiXAO wrote:


Existe-t'il une fonction pour ça ou dois-je coder ma propre
boucle ?



Il est risqué d'affimer l'inexistence d'une méthode et
pourtant je n'en vois pas qui ferait ça.


Alors, sans tenir compte des encodages et locale,


java.lang.String utilise toujours le même encodage.

voici un contournement possible :


private static final String avec = "âäàçéêëèîïôöûüù";
private static final String sans = "aaaceeeeiioouuu";


Il y a bien plus d'accents que ça. (J'en trouve environ 700,
rien que dans l'alphabet latin.)

private static String tr(String s, String orig, String dest) {
for (int i = 0 ; i < orig.length () ; i++) {
s = s.replace(orig.charAt(i), dest.charAt(i));
} return s;
}


On va donc génère environ 700 chaînes nouvelles chaque fois. Ça
me semble un peu abusif.

Si on a à le faire souvent, la meilleur solution, c'est
probablement un simple tableau de transcodage.

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34