Accentuations et trie alphabétique

Résolu
bastet1978 Messages postés 54 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 4 décembre 2005 - 10 nov. 2005 à 01:16
bastet1978 Messages postés 54 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 4 décembre 2005 - 10 nov. 2005 à 17:16
Bonjour, oui c'est tôt mais je ne trouve rien sur ce sujet.

Je dois classer par ordre alphabétique un vecteur contenant des String dont la première lettre peut-être une lettre accentuée:

J'utilise Collections.sort(monVector) mais les String dont la première lettre est accentuée se retrouvent à la fin (je n'ai pas regardé le comportement si l'accent était au milieu ou fin).

Si quelqu'un à une idée, une direction de recherche pour régler ce malheureux problème, merci. Ca devient urgent.. :(




----
OS: Ubuntu 5.10(linux)
jdk : 1.5.0
MysqlConnector/J: 3.2
mysql Ver 12.22 Distrib 4.0.24, for pc-linux-gnu (i486)
----

4 réponses

bastet1978 Messages postés 54 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 4 décembre 2005
10 nov. 2005 à 17:16
Bon voila j'ai mélangé vos idées et ça marche. Si quelqu'un à une façon
plus optimisée, je suis ouverts. l'execution est rapide, le trie ne
ralentit pas du tout mes transfères entre listes.



code:



package utilities;

import java.util.Vector;

import java.util.Collections;

import java.util.Comparator;

import java.util.Hashtable;



/**

*

* @author ANDRE Alain

*/

public class TrieurAlphaFr {

private char accentues[] = {'é','è','ê','ç','à','ù'};

private char nonAccentues[] = {'e','e','e','c','a','u'};

private int nbrLettreModif = 6;

private String tmp[] = new String[nbrLettreModif];

private Hashtable savor;

private Vector vecCleaned;



/**

* Creates a new instance of TrieurAlphaFr

*/

public TrieurAlphaFr() {

}



/**

* Permet de trier des chaînes dans un vecteur.


* @param le vecteur contenant les String

* @return un vecteur trié par ordre alphabétique

*/

public Vector getTrieAlpha(Vector vec){

// copie du vec init dans vecInit

vecCleaned = new Vector(vec.size());

savor = new Hashtable(vec.size());



vec.trimToSize();

// enregistrement cle vecteur nettoye, valeur vecteur argument

for(int i = 0; i < vec.size(); i++){

vecCleaned.addElement(cleanFr(vec.elementAt(i).toString()));


savor.put(vecCleaned.elementAt(i).toString(),
vec.elementAt(i).toString());

}

// trie

Collections.sort(vecCleaned);

// recuperation

return uCleanFr(vecCleaned);

}



/**

* Récupère les valeurs par rapport à la cle

* @param vec le vecteur nettoyé de ses accents

* @return le vecteur avec accents

*/

private Vector uCleanFr(Vector vec){

vec.trimToSize();

Vector retour = new Vector(vec.size());

if(savor == null){


System.out.println("Erreur: Class TrieurAlphaF;\nAppelle de uCleanFr()
avant cleanFr()");

return null;

}else{

for(int i = 0; i < vec.size(); i++){


retour.addElement(savor.get(vec.elementAt(i).toString()));

}

}

return retour;

}



/**

* Transformer les lettres accentuées en non-accentuées

* @param stringToClean une String dont on doit supprimer les accents

* @return une String nettoyée de ses accents

*/

private String cleanFr(String stringToClean){

tmp[0] = new String();

tmp[0] = stringToClean.replace(accentues[0], nonAccentues[0]);

for(int i = 1; i < nbrLettreModif; i++){

tmp[i] = new String();

tmp[i] = tmp[i-1].replace(accentues[i], nonAccentues[i]);

}

return tmp[nbrLettreModif-1];

}

}





----
OS: Ubuntu 5.10(linux)
jdk : 1.5.0
MysqlConnector/J: 3.2
mysql Ver 12.22 Distrib 4.0.24, for pc-linux-gnu (i486)
----
3
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
10 nov. 2005 à 10:12
à mon avis tu devrai utiliser plutot la fonction
sort(List list, Comparator c) de ta classe Collections
et tu crée ton propre comparator qui prend deux objet, les cast en string tu fé la conparaison en remplacant par exemple les à par a, é par e ...
fé gaffe à bien cloner tes strings (modifie pas les strings d origine) et ca devrai marcher

++ Toinou
0
luuuuudooooo Messages postés 64 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 2 août 2006 4
10 nov. 2005 à 11:43
Tiens, voila un exemple :

Vector vectString = new Vector();
vectString.add("abc");
vectString.add("xyz");
vectString.add("def");

Comparator cmp = new Comparator(){
public int compare(Object emp1, Object emp2){
return ((String)emp1).compareTo((String)emp2);
}
};

Collections.sort(vectString,cmp);

for (int i=0; i<vectString.size(); i++)
System.out.println(vectString.get(i));

Sortie écran :


abc


def


xyz
0
bastet1978 Messages postés 54 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 4 décembre 2005
10 nov. 2005 à 12:44
Merci pour ces infos, je vais voir ça tout de suite.








----
OS: Ubuntu 5.10(linux)
jdk : 1.5.0
MysqlConnector/J: 3.2
mysql Ver 12.22 Distrib 4.0.24, for pc-linux-gnu (i486)
----
0
Rejoignez-nous