comparaison de chaine ça marche plus - Java - Programmation
Marsh Posté le 23-10-2008 à 18:36:51
il y a pas de compare sur String
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.
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.
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
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 |
Marsh Posté le 23-10-2008 à 19:37:23
ça risque de prendre du temps d'exécution de la requête est long
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
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 |
Marsh Posté le 25-10-2008 à 00:58:58
Code :
|
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 :
|
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 :
|
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.
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
Marsh Posté le 25-10-2008 à 16:53:57
sircam a écrit : |
C'est juste ce que je ferais personnellement
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