comparaison de chaine ça marche plus

comparaison de chaine ça marche plus - Java - Programmation

Marsh Posté le 23-10-2008 à 18:35:33    

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  

Reply

Marsh Posté le 23-10-2008 à 18:35:33   

Reply

Marsh Posté le 23-10-2008 à 18:36:51    

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 !
Reply

Marsh Posté le 23-10-2008 à 18:42:13    

desole c a.compareTo

Reply

Marsh Posté le 23-10-2008 à 18:56:50    

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
Reply

Marsh Posté le 23-10-2008 à 18:58:41    

merci je teste

Reply

Marsh Posté le 23-10-2008 à 19:12:57    

désole mais ça marche pas

Reply

Marsh Posté le 23-10-2008 à 19:17:48    

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
Reply

Marsh Posté le 23-10-2008 à 19:23:46    

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

Reply

Marsh Posté le 23-10-2008 à 19:31:50    

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
Reply

Marsh Posté le 23-10-2008 à 19:34:56    

je teste

Reply

Marsh Posté le 23-10-2008 à 19:34:56   

Reply

Marsh Posté le 23-10-2008 à 19:37:23    

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

Reply

Marsh Posté le 23-10-2008 à 19:52:10    

les longueurs ne sont les mêmes  

Reply

Marsh Posté le 24-10-2008 à 09:26:22    

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

Reply

Marsh Posté le 24-10-2008 à 09:45:09    

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

Reply

Marsh Posté le 24-10-2008 à 18:16:46    

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}
Reply

Marsh Posté le 25-10-2008 à 00:58:58    

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. }


Reply

Marsh Posté le 25-10-2008 à 11:39:22    

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
Reply

Marsh Posté le 25-10-2008 à 13:59:03    

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}
Reply

Marsh Posté le 25-10-2008 à 16:53:57    

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
Reply

Marsh Posté le 25-10-2008 à 17:48:37    

:o


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed