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 :
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
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; }
sauf que, j'ai voulus le faire sans boucle et utiliser des méthodes plus simple d'ou l'utilisation de compareToIgnoreCase ou equalsIgnoreCase :
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(); }
si je prend la chaine (le palindrome ): "A man, a plan, a canal : Panama!"
voila ce que j'ai fait :
compareToIgnoreCase :
avec equalsIgnoreCase :
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;
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,
Partager