IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Tri d'une Chaine de Caractère selon un Critère


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut Tri d'une Chaine de Caractère selon un Critère
    Bonjour,

    Je cherche a effectuer un tri sur un Tableau contenant des chaines de caractères, selon un critère, de la façon la plus optime possible,

    Exemple:
    --------

    Entrer:
    Tab[0]="*****20070501_1030*****"
    Tab[1]="*****20070301_1030*****"
    Tab[2]="*****20070101_1030*****"
    Tab[3]="*****20070201_1030*****"
    Tab[4]="*****20070401_1030*****"

    Sortie:
    Tab[0]="*****20070101_1030*****"
    Tab[1]="*****20070201_1030*****"
    Tab[2]="*****20070301_1030*****"
    Tab[3]="*****20070401_1030*****"
    Tab[4]="*****20070501_1030*****"

    La chaine au milieu représente la date, elle se trouve a chaque fois au même endroit du début de la phrase,

    Merci d'Avance,

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Un simple tri lexicographique avec la relation d'ordre naturelle sur les chaînes de caractères me paraît optimisé...

    Ce sera certainement plus rapide que de découper ta chaîne avec un subString pour ne comparer que les sous-chaînes qui t'intéressent (ce qui impliquerait d'ailleurs une création de nouveaux objets de type String, donc de l'espace mémoire supplémentaire).

    Je te conseille donc un simple "compareTo()" sur tes chaînes.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    Merci de ta réponse,

    Comme étant "Niveau Intermédiaire" en Programmation JAVA, je ferai des petites recherches sur l'utilisation de cette méthode, question de souvenir un peu du Passer

    J'espère que j'ai bien exposé mon besoin et que cette méthode fera la faire,

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    C'est cette méthode que je doit utiliser, mais j'ai pas réussir a détecté le comparateur,

    sort(List<T> list, Comparator<? super T> comparator);

    Un petit aide SVP ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<String> chaines = new ArrayList<String>();
    ...
    Collections.sort(chaines);
    Ca me semble pas plus compliqué que cela... String étant un Comparable, pas besoin de fournir de comparateur.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    Merci Pour Vos Réponse, je pense que j'ai réussi à résoudre mon problème en se basons sur les méthodes suivants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class SubStrComp implements Comparator {
     public int compare(Object o1, Object o2) throws ClassCastException {
       String s1 = (String) o1 ;
       String s2 = (String) o2 ;
     
       return (s1.substring(start, end)).compareTo(s2.substring(start, end));
     }
    }
    Collections.sort(list, new SubStrComp());
    "Start" et "end" étant les indices, de la sous chaine que je voulais se baser sur elle pour trier mes chaines de caractères,

    Merci Pour la Méthode Men,

    Je vois que contrairement a votre suggestion j'ai passé comme même par SubString, je vois pas comment peut on faire sans ? Merci de m'indiquer s'il y a une optimisation a ce script,

  7. #7
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    cf. mon premier post.

    A tester (je peux me tromper) mais je pense que tu iras plus vite à comparer tes chaînes entières qu'à faire un substring... Ton substring créant systématiquement deux nouveaux objets

    Donc tu as sans doute intérêt à remplacer "Collections.sort(list, new SubStrComp());" par "Collections.sort(list);"

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Le problème, je pense, est que ces chaînes ne contiennent pas que la date, mais tout un autre texte, la comparaison "normale" des strings va donc prendre en compte tous les caractères, alors que lui ne désire classer que par rapport aux dates.

    Ai-je bien compris le problème ? :p

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    ... sauf qu'aparemment, les autres caractères ne sont que des étoiles (*).

    Je crois que niveau performance, il est préférable de faire 5 comparaisons supplémentaires plutôt que de créer 2 String avec les substrings (sans compter les casts).

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Je suis tout à fait d'accord sur les performances, enfin je pense aussi ^^

    Mais je voyais les étoiles comme une façon de montrer qu'il y avait autre chose, et donc que l'exemple donnée dans le premier post n'est pas si probant que ça. Après à lui de nous dire, si effectivement ce n'est que des étoiles, alors adieu les substring ^^

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    Salut tout le Monde,
    Oui bien évidemment, les * remplacés d'autres caractères qui peuvent être "minuscule", Majuscule", ou bien des "nombres", l'essentiel c'est que le nombre de caractère du départ de la chaine jusqu'à la date c'est identique,

    Maintenant je pense que la réponse est évidente, le problème que j'avais au début c'est que j'ignore totalement les fonctions JAVA et je voulais profiter des fonctions préparés au lieu de faire plusieurs ligne de code,

    Merci de votre Implication,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 22/10/2012, 22h53
  2. Comment récupérer une chaine de caractère selon son début et sa fin?
    Par neo62matrix dans le forum Général Python
    Réponses: 3
    Dernier message: 21/03/2012, 11h08
  3. Tri d'une chaine de caractères
    Par schuller dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2009, 17h21
  4. Réponses: 8
    Dernier message: 24/07/2007, 14h39
  5. Diviser un fichier selon une chaine de caractères
    Par navis84 dans le forum Langage
    Réponses: 4
    Dernier message: 19/06/2006, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo