Comparaison des chaînes de caractères [Résolu]

Signaler
Messages postés
83
Date d'inscription
jeudi 17 novembre 2005
Statut
Membre
Dernière intervention
23 juin 2007
-
Messages postés
83
Date d'inscription
jeudi 17 novembre 2005
Statut
Membre
Dernière intervention
23 juin 2007
-
bonjour,
comment pourrai je comparer deux chaînes de caractères?
sachant que j'ai eu les deux chaînes de caractères de la manière suivante:

//le premier mot:
String[] result = zone.getText().split("[file://b%22)/ \\b")];
// le texte est récupéré à partir de jTextArea
String mot1 =(String) result[x];//en utilisant une boucle
//le deuxième mot:
ResultSet cur1=req.executeQuery("select * from insign");
//insign une table à 2 colonnes (int,String)
String mot2 = cur1.getString(2);//en utilisant une boucle

j'ai essayer le (==) et la méthode "equals" mais ça n'a pas marché(le résultat est éronné).

merci.

6 réponses

Messages postés
7
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
9 décembre 2005

Attention à ne pas confondre l'opérateur = = et la
méthode équals(). L'opérateur == compare les références des objets. Par
contre la méthode equals() de l'objet String compare bien une chaîne de
caractères à une autre.




Javadoc pour String :

public boolean equals (Object anObject)




Compares this string to the specified object. The result is
true
if and only if the argument is not
 null
and is a
String
object that represents
the same sequence of characters as this object.



Petit exemple :

public static void main(String[] args)

{

String str1 = new String("hello");

String str2 = new String("hello");



System.out.println(str1==str2); // Résultat : false

System.out.println(str1.equals(str2)); // Résultat : true

}



Si tes chaînes semblent identiques à l'affichage
mais que la méthode retourne false, c'est qu'il y a peut-être des
caractères d'espacement qui trainent en fin ou en début de chaîne. Tu
as plusieurs manières de vérifier :



En ajoutant un caractère supplémentaire en début et en fin de chaîne afin de mieux repérer les caractères en trop :


System.out.println("#" + str1 + "#");


System.out.println("#" + str2 + "#");




En affichant la longeur des chaines :


System.out.println(str1 + " " + str1.length());


System.out.println(str2 + " " + str2.length());



Ensuite si la présence de caractères d'espacement est bien le souci, tu utilises la méthode trim() :

str1 = str1.trim();

str2 = str2.trim();




Tu peux aussi comparer et faire le trim() en même temps (mais ce n'est pas très joli) :

str1.trim().equals(str2.trim());



Et si ça ne fonctionne pas, tu peux toujours essayer d'afficher le code
ASCII de chacun des caractères de tes chaînes pour voir où ça coince.
Mais normalement ça derait fonctionner...
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
1
bonsoir,
ne convient pas pour comparer 2 chaînes, mais equals oui, çà m'étonne que ça marche pas...
qu'entends tu par le résultat est erroné ?
si tu ne dois pas tenir compte des espaces, un trim() des deux chaînes avant comparaison est recommandé .... puis essayes aussi str1.compareTo(str2);
ps : =(String) result[x];// ici le cast est inutile puis
Messages postés
83
Date d'inscription
jeudi 17 novembre 2005
Statut
Membre
Dernière intervention
23 juin 2007

c'est à dire quand j'affiche mot1 et mot2 (pour vérifier) et bien c'est la même chaîne de caractère qui s'affiche or il considère que se sont deux chaînes différentes.
quant au trim() et bien je sais pas comment l'integrer dans mon programme ( je sais pas l'utiliser), ça serait sympa si tu me donnais un petit exemple sur l'utilisation du
trim().
au fait j'ai essayer la méthode compareTo mais ça n'a pas marché.
merci
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
104
Attention, le equals compare les pointeurs sur les chaînes de caractères il me semble, du coup, si tu fait :

String mot1 = New String("coucou");

String mot2 = New String("coucou");



equals te renverra false, par contre :

String mot1 = new String("coucou");

String mot2 = mot1;



Alors la, equals te renverra true car les deux pointeurs pointe sur le même objets.



Utilise compareTo pour comparer des chaînes :

if (mot1.compareTo(mot2) == 0)

System.out.println("Egal !");

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
1
voilà tout est dit je crois ... A+
Messages postés
83
Date d'inscription
jeudi 17 novembre 2005
Statut
Membre
Dernière intervention
23 juin 2007

cool ça marche!! effectivement il y avait des espaces en plus, trim() a reglé le problème.
MERCI