Accentuations et trie alphabétique [Résolu]

bastet1978 54 Messages postés lundi 29 septembre 2003Date d'inscription 4 décembre 2005 Dernière intervention - 10 nov. 2005 à 01:16 - Dernière réponse : bastet1978 54 Messages postés lundi 29 septembre 2003Date d'inscription 4 décembre 2005 Dernière intervention
- 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)
----
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
bastet1978 54 Messages postés lundi 29 septembre 2003Date d'inscription 4 décembre 2005 Dernière intervention - 10 nov. 2005 à 17:16
3
Merci
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)
----

Merci bastet1978 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de bastet1978
super_toinou 764 Messages postés mardi 25 mai 2004Date d'inscription 8 mars 2011 Dernière intervention - 10 nov. 2005 à 10:12
0
Merci
à 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
Commenter la réponse de super_toinou
luuuuudooooo 64 Messages postés mardi 4 octobre 2005Date d'inscription 2 août 2006 Dernière intervention - 10 nov. 2005 à 11:43
0
Merci
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
Commenter la réponse de luuuuudooooo
bastet1978 54 Messages postés lundi 29 septembre 2003Date d'inscription 4 décembre 2005 Dernière intervention - 10 nov. 2005 à 12:44
0
Merci
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)
----
Commenter la réponse de bastet1978

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.