Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
962 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  comparaison de chaine ça marche plus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparaison de chaine ça marche plus

n°1803735
cazersose
Posté le 23-10-2008 à 18:35:33  profilanswer
 

bonjour , j'ai un problème de fous  
j'ai un String a="toto"
quand je fais  
if (a.compare("toto" )==0){System.out.println("tata)";}
ça marche pas et pourtant dans une autre classe ça marche sur la mm machine  
JAVA_HOME =opt/jdk.1.6.0_06
sous fedora de l'aide svp  

mood
Publicité
Posté le 23-10-2008 à 18:35:33  profilanswer
 

n°1803736
kadreg
profil: Utilisateur
Posté le 23-10-2008 à 18:36:51  profilanswer
 

il y a pas de compare sur String :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°1803740
cazersose
Posté le 23-10-2008 à 18:42:13  profilanswer
 

desole c a.compareTo

n°1803746
masklinn
í dag viðrar vel til loftárása
Posté le 23-10-2008 à 18:56:50  profilanswer
 

Pourquoi  ne pas utiliser equals dans ce cas précis? Et pourquoi ne pas regarder ce que renvoie ton appel à compareTo? Accessoirement, quand on a une constante dans une comparaison il est suggéré d'utiliser la constante comme base ("toto".equals(a)) plutôt que l'inverse: si a est null dans ton cas ça pète une NPE, alors que dans l'exemple que j'ai donné à a un comportement correct.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1803748
cazersose
Posté le 23-10-2008 à 18:58:41  profilanswer
 

merci je teste

n°1803750
cazersose
Posté le 23-10-2008 à 19:12:57  profilanswer
 

désole mais ça marche pas

n°1803753
masklinn
í dag viðrar vel til loftárása
Posté le 23-10-2008 à 19:17:48  profilanswer
 

cazersose a écrit :

merci je teste


cazersose a écrit :

désole mais ça marche pas


Ce qui est bien ici c'est que je sais absolument pas ce que tu as testé et que tu ne fournis aucune info de débug.
 
D'ailleurs si tu commençais par nous donner le vrai code que tu testes, ou que tu créais un sanity test avec le code que tu as posté au dessus, avec l'output complet, ça pourrait également aider pas mal.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1803754
cazersose
Posté le 23-10-2008 à 19:23:46  profilanswer
 

v1= d.ExecSQL(req16,w);  
 while ( v1.next()){
       String x= v1.getString(2);
if ((x.compareTo("HST_PEUGEO" )==0)) { cpt=3;f.MAJVAL(cpt,ind,v1.getDouble(3),sheet);cpt++; f.MAJVAL(cpt,ind,v1.getDouble(4),sheet);}
 
if ((x.compareTo("HST_RENAUL" )==0)) { cpt=5;f.MAJVAL(cpt,ind,v1.getDouble(3),sheet);cpt++; f.MAJVAL(cpt,ind,v1.getDouble(4),sheet);}
                        }
quand je fais un print de x il contient bien les mêmes valeurs de la variable de test

n°1803758
masklinn
í dag viðrar vel til loftárása
Posté le 23-10-2008 à 19:31:50  profilanswer
 

cazersose a écrit :

quand je fais un print de x il contient bien les mêmes valeurs de la variable de test


Manifestement non, d'ailleurs je suis sûr que si tu utilises des valeurs hardcodées comme celle que tu nous a donné, ça va fonctionner sans problème.
 
Si tu ne vois pas les erreurs en printant dans la console, il y a 9 chances sur 10 que ce soit du padding à coup d'espaces ou autres, ou des caractères non imprimables. Vérifies e.g. que les longueurs sont bien identiques.

Spoiler :

accessoirement, il m'a l'air bien dégueulasse ce code [:bien]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1803760
cazersose
Posté le 23-10-2008 à 19:34:56  profilanswer
 

je teste

mood
Publicité
Posté le 23-10-2008 à 19:34:56  profilanswer
 

n°1803762
cazersose
Posté le 23-10-2008 à 19:37:23  profilanswer
 

ça risque de prendre du temps d'exécution de la requête est long

n°1803767
cazersose
Posté le 23-10-2008 à 19:52:10  profilanswer
 

les longueurs ne sont les mêmes  

n°1803892
cazersose
Posté le 24-10-2008 à 09:26:22  profilanswer
 

y'a une différence de 2 a 3 caractère  

n°1803898
cazersose
Posté le 24-10-2008 à 09:45:09  profilanswer
 

comment enlever le padding car la longueur des chaine issu des requêtes et plus longue que la chaine de comparaison  

n°1804327
sircam
I Like Trains
Posté le 24-10-2008 à 18:16:46  profilanswer
 

http://java.sun.com/javase/6/docs/ [...] tring.html
 
Et accessoirement, "garbage in, garbage out". Faudrait peut-être se demander pq les données apparaissent avec du padding.
 

Spoiler :

Quel code pas propre :(


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1804412
Bidem
Posté le 25-10-2008 à 00:58:58  profilanswer
 

Code :
  1. if ((x.compareTo("HST_PEUGEO" )==0)) {
  2.   // Block 1
  3. }
  4. if ((x.compareTo("HST_RENAUL" )==0)) {
  5.   // Block 2
  6. }


 
Vu que tes conditions sont mutuellement exclusive (si une est vrai, l'autre est forcement fausse), je te conseille l'utilisation du "else if".
Et comme Masklinn l'a dit, "equals" est plus approprié.
compareTo doit être réservé exclusivement aux cas où on a une notion d'ordre (alphabétique en ce qui concerne les String)
 

Code :
  1. if ("HST_PEUGEO".equals(x)) {
  2.   // Block 1
  3. } else if ("HST_RENAUL".equals(x)) {
  4.   // Block 2
  5. } else {
  6.   // Gesion d'erreur
  7.   throw new XxxException("Valeur non reconnue de x : " + x);
  8. }


n°1804431
masklinn
í dag viðrar vel til loftárása
Posté le 25-10-2008 à 11:39:22  profilanswer
 

Bidem a écrit :

Et comme Masklinn l'a dit, "equals" est plus approprié.


Ouais enfin personnellement si le nombre de cas est final, en fonction des tâches à effectuer soit j'utiliserais une enum et un case

Code :
  1. public enum HST {
  2.    PEUGEOT, RENAULT;
  3.  
  4.    public static valueOf(final String str) {
  5.        // effectuer la transfo entre HST_* et HST.*
  6.        // balancer une exception si valeur non reconnue
  7.    }
  8. }
  9.  
  10. // [...]
  11.  
  12. final HST type = HST.valueOf(x.getString(WHATEVER_TYPE)); // utiliser des constantes pour aliaser les "magic numbers" et rendre compréhensible ce à quoi ils correspondent.
  13. // également possible d'utiliser une enum qui va mapper un type de données à une colonne, histoire que ce soit plus flexible
  14.  
  15. switch(type) {
  16.    case PEUGEOT:
  17.        // do stuff
  18.        break;
  19.    case RENAULT:
  20.        // do stuff
  21.        break;
  22. }


soit une hiérarchie de classes qui feront le boulot comme des grandes avec une factory pour mapper entre les valeurs de la spreadsheet et les classes java.

Message cité 1 fois
Message édité par masklinn le 25-10-2008 à 11:39:48

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1804454
sircam
I Like Trains
Posté le 25-10-2008 à 13:59:03  profilanswer
 

masklinn a écrit :

soit une hiérarchie de classes qui feront le boulot comme des grandes avec une factory pour mapper entre les valeurs de la spreadsheet et les classes java.


Hmmm, voilà qui est "advanced" pour répondre à qqn qui ne s'en sort déjà pas avec java.lang.String  [:pingouino]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1804492
masklinn
í dag viðrar vel til loftárása
Posté le 25-10-2008 à 16:53:57  profilanswer
 

sircam a écrit :


Hmmm, voilà qui est "advanced" pour répondre à qqn qui ne s'en sort déjà pas avec java.lang.String  [:pingouino]  


C'est juste ce que je ferais personnellement :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1804518
sircam
I Like Trains
Posté le 25-10-2008 à 17:48:37  profilanswer
 

:o


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  comparaison de chaine ça marche plus

 

Sujets relatifs
Enlever des parentheses debut et de fin à une chaine!!!faire une fonction qui retourne une chaine de caractere
tester la présence d'un espace dans une chaine.[Asm]Cryper une chaine de caractere
Rechercher la suite d'un début de chaine de caractèresRetour chariot et fichier texte => \n ne marche pas
Comparaison des éléments d'un JPanel[Résolu]Petite question trés simple pour comparaison entre deux chaine
remplacement chaine incrémentée 
Plus de sujets relatifs à : comparaison de chaine ça marche plus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR