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 :

Méthode de comparaison chaine de caractères


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Méthode de comparaison chaine de caractères
    Bonjour,

    Voila j'ai un soucis de compréhension entre les méthodes compareToIgnoreCase et equalsIgnoreCase,

    je voudrais comparer 2 chaines de caractères mais pas n'importe lesquelles, des palindromes.

    donc en tout logique j'ai pensé : la chaine 1 doit être égale a l'inverse de la chaine 2.

    bon au debut j'etais parti sur un truc simple :

    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
     
    public boolean estPalindrome(){
     
            int indexFin = chaine.length()-1;
            int indexDebut;
            for (    indexDebut=0;
                     indexDebut<=indexFin;
                     indexDebut++,indexFin--);
            {
     
            if (chaine.charAt(indexDebut)!=chaine.charAt(indexFin)){
                return false;
            }
           return true;
        }
    cela marcher bien pour les mots qui était palindrome mais pas les chaines de caractères d'ou l'utilisation d'un méthode pour simplifier la chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public void simplifier (String lachaine){
            chaine = chaine.replaceAll("\\W","");
            chaine = chaine.toLowerCase();
     
        }
    sauf que, j'ai voulus le faire sans boucle et utiliser des méthodes plus simple d'ou l'utilisation de compareToIgnoreCase ou equalsIgnoreCase :

    si je prend la chaine (le palindrome ): "A man, a plan, a canal : Panama!"

    voila ce que j'ai fait :

    compareToIgnoreCase :

    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
     
            int resultat;
            StringBuilder chaine2 = new StringBuilder(chaine);
            chaine2.reverse();
            String laChaine =chaine2.toString();
            resultat=chaine.compareToIgnoreCase(laChaine);
            if(resultat==0){
                System.out.println("c'est un palindrome");
                return true;
            }else {
                System.out.println(laChaine);
                System.out.println(resultat);
                System.out.println("ce n'est pas un palindrome");
     
            }
            return false;
    avec equalsIgnoreCase :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    boolean res;   
            StringBuilder chaine2 = new StringBuilder(chaine);
            chaine2.reverse();
            String laChaine =chaine2.toString();
            res=chaine.equalsIgnoreCase(laChaine);
            System.out.println(chaine);
            System.out.println(laChaine);
            return res;

    sauf que ces deux derniers ne marche pas, et je ne comprend pas pourquoi. j'ai bien regardé la doc de ces 2 méthodes (comparaison lexicographique et ignorer la casse) et même si globalement, elle retournent bien le résultat que je souhaiterai, elles me disent que c'est faux.

    alors voila, je ne comprend pas vraiment ce que veut dire une comparaison lexicographique ? est-ce que ces méthodes ignorent juste la casse ou ignorent aussi la ponctuation ?

    du coup dois-je forcement me servir de ma méthode "simplifier" ou elle peuvent se débrouiller sans ?


    merci d'avance,

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Elle ignorent la casse, comme l'indique la javadoc, et rien d'autre. La comparaison lexicographique, c'est bêtement l'ordre alphabétique

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    La comparaison lexicographique, c'est bêtement l'ordre alphabétique
    Ben non justement -_-°. L'ordre alphabétique est un ordre lexicographique, mais c'est pas le seul. Vu qu'une String peut contenir autre chose que des lettres de l'alphabet minuscules sans accent, l'ordre alphabétique n'est pas équivalent à l'ordre lexicographique.

    L'ordre lexicographique dans les String, c'est :
    - considérer qu'une String est une séquence de chars. Les ponctuations sont des chars comme les autres.
    - définir un ordre pour l'ensemble des chars, de sorte que pour deux chars différents, l'un précède toujours l'autre. Ici, c'est l'ordre Unicode.
    - comparer d'abord le premier char de chaque String, et si c'est les mêmes, le deuxième, et ainsi de suite jusqu'à tomber sur deux chars différents.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    ahhh d'accord, donc effectivement ToIgnoreCase et equalsIgnoreCase conservent les virgules ou autres points de ponctuations.... c'est pour ca que ca marche pas...c'est donc ca l'ordre lexicographique ! je suis donc obliger de passer par ma methode simplifier....

    effectivement ca marche bien! ^^

    merci beaucoup de vos réponses !!!!

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par thelvin Voir le message
    - définir un ordre pour l'ensemble des chars, de sorte que pour deux chars différents, l'un précède toujours l'autre. Ici, c'est l'ordre Unicode.
    C'est donc un ordre alphabétique basé sur l'alphabet unicode. (quoi, moi de mauvaise foi? Jamais!)

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Un alphabet ne contient que des symboles voués à exprimer des phonèmes.
    Unicode, contenant bien plus de choses, telles que ponctuations et différence entre minuscules, majuscules et accents, n'est pas un alphabet selon les considérations usuelles.

    Un alphabet, c'est genre A - B - C - ... - Z ou ceux d'autres langues.

    Une différence importante, est que l'ordre alphabétique se fiche des majuscules, minuscules et accents. L'ordre lexicographique basé sur Unicode, non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    merci pour les precisions les gars ! tout est bien clair dans ma tete maintenant ^^

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

Discussions similaires

  1. Comparaison chaines de caractères
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/11/2008, 13h56
  2. Réponses: 12
    Dernier message: 08/07/2008, 16h53
  3. comparaison chaines de caractères
    Par tom31 dans le forum C
    Réponses: 1
    Dernier message: 09/02/2008, 10h56
  4. Réponses: 1
    Dernier message: 24/01/2008, 17h30
  5. Comparaison chaines de caractères
    Par mmarcoboss dans le forum C
    Réponses: 6
    Dernier message: 19/12/2006, 16h15

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