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

avec Java Discussion :

Méthode CompareTo (String,String).


Sujet :

avec Java

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut Méthode CompareTo (String,String).
    Bonjour à tous,

    je veux comparer deux chaines de caractères (résultat d'une concaténation).
    Sauf que l'algorithme de comparaison compareTo ne renvoie pas ce que je veux.

    En effet, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    if(pkdisttmp.equals(pklocaletmp))
    						{
    							stop=true;
    							presenceLigne=true;
    							debug=debug+" EGALITE : "+pklocaletmp+" = "+pkdisttmp+"\n";
     
    						}
    						else if(pkdisttmp.compareToIgnoreCase(pklocaletmp)>0)
    						{
    							stop=true;
    							debug=debug+"STOP : "+pklocaletmp+" > "+pkdisttmp+"\n";
    						}
    						else
    						{
    							encoreDis=resultatsdis.next();
    							debug=debug+"ON CONTINUE : "+pklocaletmp+" < "+pkdisttmp+"\n";
    							indiceParcoursDistante++;
    						}
    et le fichier debug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [...]
    ON CONTINUE : 1AP1RUP < 1ALIZN2
    ON CONTINUE : 1AP1RUP < 1ANNCNT
    STOP : 1AP1RUP > 1APMFOU
    [...]
    Lorsque la chaine de caractères formée possède un chiffre ou un caractère particulier ( je pense au _ notamment).
    Il semblerait donc que les chiffres ou le _ soit > aux lettres de l'alphabet si je suis logique mais je souhaiterais l'inverse.

    Existe t'il un autre algorithme de tri ou dois-je le redéfinir et si oui comment ?

    J'espère avoir été assez clair.

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut
    Pour les curieux :

    L'order by d'oracle me donne cette ordre la :

    APMFOU
    APRDEV
    APRRUP
    APRSPO
    APRTRF
    APRTRI
    APRUNI
    AP1RUP
    AP3QTE
    AP5RUP

    Et l'ordre alphabétique de Java (compareTo) opterait pour celui la :

    AP1RUP
    AP3QTE
    AP5RUP
    APMFOU
    APRDEV
    APRRUP
    APRSPO
    APRTRF
    APRTRI
    APRUNI

    D'où mon erreur lors des comparaisons.

  3. #3
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 560
    Points : 15 487
    Points
    15 487
    Par défaut
    Pour la comparaison, Java utilise l'ordre de l'unicode: chiffres < lettres majuscules < '_' < lettres minuscules.
    Comme tu utilises compareIgnoreCase() toutes les lettres sont considérées comme des majuscules. Donc tu as chiffres < lettres < '_'.

    Si tu veux faire chiffres < '_' < lettres. Tu pourrais mettre les deux chaines a comparer en minuscules avec toLower() et faire un compareTo() dessus.

    Par contre si tu veux faire lettres < '_' < chiffres, il te faudra le programmer. Ce n'est pas complexe a réaliser : il suffit de parcourir les chaines lettres par lettres jusqu'à trouver une différence.

  4. #4
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,

    Dans la mesure où la classe String n'implémente pas la comparaison comme que tu le veux, tu peux le faire par toi même en créant une classe implémentant Comparator.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class MonComparator implements Comparator<String>, java.io.Serializable {
      public int compare(String s1, String s2) {
        //tes propres comparaisons de caractère
      }
    }

  5. #5
    Membre habitué Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Points : 131
    Points
    131
    Par défaut
    Tu te trompes de signe dans tes comparaisons. Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pkdisttmp.compareToIgnoreCase(pklocaletmp) > 0
    c'est que pkdisttmp est plus grand que pklocaletmp ! essaie "b".compareTo("a")...

    Remarque: faire un equals puis un compareTo est inefficace, tu peux faire directement le compareTo et tester si le résultat vaut 0.

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 12
    Points : 18
    Points
    18
    Par défaut
    Jette un coup d'oeil la dessus, ca peut peut-être t'aider :

    http://java.sun.com/j2se/1.4.2/docs/.../Collator.html

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut
    Petit message pour annoncer que le problème a été résolu grâce à la méthode compareTo de java mais en changeant une propriété de la base Oracle : le parametre NLS_SORT juste pour la session.

    http://www.developpez.net/forums/d89...-tient-compte/

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

Discussions similaires

  1. Dll avec méthodes utilisant des strings
    Par Ekinx93 dans le forum C++
    Réponses: 6
    Dernier message: 21/09/2012, 01h38
  2. appele d'une méthode a paramètres string
    Par sasuke18 dans le forum JDBC
    Réponses: 3
    Dernier message: 06/06/2012, 16h07
  3. plugin perso, appel une méthode par un string
    Par splifferwolf dans le forum jQuery
    Réponses: 3
    Dernier message: 27/11/2011, 13h17
  4. La méthode RessourceBundle.getBundle(String baseName)
    Par caro_caro dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 08/10/2008, 13h30
  5. CompareTo sur String avec des caractères numériques
    Par seb0634 dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2008, 10h35

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