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

  FORUM HardWare.fr
  Programmation
  Java

  NullPointerException avec la methode equals et split !!!! [Résolu]

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

NullPointerException avec la methode equals et split !!!! [Résolu]

n°1009747
dcvlm
Yep
Posté le 11-03-2005 à 14:12:39  profilanswer
 

Alors là !!! Ca me sidère... !!  :ouch:  
 
Et en plus comme ca fait 1H que je cherche, ca me rend fou !!!  :fou:  
 
Je parcours un fichier ligne par ligne, et je veux faire un traitement spécial si la ligne contient

new_topic


Donc je fais :

if(lu.equals("new_topic" ))


 
Et bah ca me balance un NullPointerException !!!! Arghhhhh
 
 
Please help ! :pt1cable:
---------------------------------------------------------------------
 
Edit :
Le topic original ne parlait que de mon prb avec le equals, et avec cet edit, je rajoute mon prb avec le split !!!!
--> voir plus bas dans le topic :http://forum.hardware.fr/forum2.ph [...] 9#t1014160


Message édité par dcvlm le 16-03-2005 à 09:16:40

---------------
ZZZZzzzzz
mood
Publicité
Posté le 11-03-2005 à 14:12:39  profilanswer
 

n°1009762
FlorentG
Posté le 11-03-2005 à 14:15:56  profilanswer
 

Ca va être dur de t'aider si tu nous dis pas d'où sort la varaible 'lu' ;)

n°1009777
dcvlm
Yep
Posté le 11-03-2005 à 14:20:15  profilanswer
 

C une bete string extraite d'un bete.txt:


BufferedReader in = new BufferedReader(new FileReader("chemin" ));
lu=in.readLine();


(le tout dans une boucle while...)
 
 
Merci ! :hello:


---------------
ZZZZzzzzz
n°1009779
nraynaud
lol
Posté le 11-03-2005 à 14:20:51  profilanswer
 

dcvlm> lu est probablement nulle.
 
y'a des gens qui justement conseillent de toujour écrire l'égalité à l'envers : "chaine".equals(variable)
 
ou dans Eiffel, y'a une fonction statique equals(v1, v2) qui prend en cherge le null.


---------------
trainoo.com, c'est fini
n°1009785
FlorentG
Posté le 11-03-2005 à 14:25:35  profilanswer
 

dcvlm a écrit :

C une bete string extraite d'un bete.txt:


BufferedReader in = new BufferedReader(new FileReader("chemin" ));
lu=in.readLine();


(le tout dans une boucle while...)
 
 
Merci ! :hello:


Ca me dit toujours pas ce qu'est le 'lu' ;)  
 
Bon sinon, c'est le readLine qui doit foirer

n°1009791
benou
Posté le 11-03-2005 à 14:29:20  profilanswer
 

nraynaud a écrit :

y'a des gens qui justement conseillent de toujour écrire l'égalité à l'envers : "chaine".equals(variable)


c'est une solution de facilité, mais faut pas prendre ça comme habitude : souvent la valeur null a une signification spéciale.
 
D'ailleur c'est le cas, là. => dcvlm, vas voir dans la javadoc de BufferedReader.readLine(), tu verras que ce n'est pas anormal que ca renvoit null.


Message édité par benou le 11-03-2005 à 14:38:46

---------------
ma vie, mon oeuvre - HomePlayer
n°1009792
dcvlm
Yep
Posté le 11-03-2005 à 14:29:31  profilanswer
 

FlorentG : lu est :

String lu="";


 
Et mon lu est absolument pas vide, parce que :
 
1/si je demande pas le if pr le traitement et que je fais simplement  

out.println("<tr><td>"+lu+"</td></tr>" );


et bah ca marche tres bien
2/ Si je fais if(!lu.equals("new_topic" )), je ne rentre pas dans le if pour autant !
 
(rmq : ce sont des servlets, mais c'est presque trivial, non ??  :) )


Message édité par dcvlm le 11-03-2005 à 14:29:41

---------------
ZZZZzzzzz
n°1009802
dcvlm
Yep
Posté le 11-03-2005 à 14:34:21  profilanswer
 

nraynaud président !
 
En effet, ca marche très bien dans l'autre sens !!!! :hello:


---------------
ZZZZzzzzz
n°1009806
benou
Posté le 11-03-2005 à 14:36:25  profilanswer
 

dcvlm a écrit :


En effet, ca marche très bien dans l'autre sens !!!! :hello:


t'as compris pkoi, au moins ?  :heink:  


---------------
ma vie, mon oeuvre - HomePlayer
n°1009811
Taz
bisounours-codeur
Posté le 11-03-2005 à 14:37:56  profilanswer
 

lu.equals("new_topic" )
 
 
d'où la recommandation classique
 
-> "new_topic".equals(lu)
 
et c'est blindé

mood
Publicité
Posté le 11-03-2005 à 14:37:56  profilanswer
 

n°1009815
benou
Posté le 11-03-2005 à 14:39:05  profilanswer
 

Taz a écrit :

et c'est blindé


je trouve qu'au contraire ca l'est pas ... en faisant ça tu fais 2 tests en un, mais y a souvent des cas où tu ne dois pas te comporter de la même façon dans les 2 cas.
 
J'ai déjà vu pas mal de bug à cause de se genre d'habitude => je conseille pas de systématiser ce genre d'écriture.


Message édité par benou le 11-03-2005 à 14:40:38

---------------
ma vie, mon oeuvre - HomePlayer
n°1009829
Taz
bisounours-codeur
Posté le 11-03-2005 à 14:43:03  profilanswer
 

ben va le dire aux gens de Sun qui ont décidés de spécifier equals() comme ça. Et puis bon, si t'es capable de te souvenir qu'on compare les chaines avec .equals(), tu peux aussi te souvenir que si l'argument est null, ça fait faux.
 
Sinon tu deviens parano, et tu retrouves vie à écrire des
 
if(y == null) { return false; }
else { return x.equals(y); }
 
(c'est du déjà vu ça)

n°1009899
dcvlm
Yep
Posté le 11-03-2005 à 15:13:33  profilanswer
 

benou>> Non je n'ai pas compris pourquoi !
Si j'avais à connaissance la subtilité dont tu parlres --> bah j'aurais pensé à l'écire dans l'autre sens   :heink:  
 
Sinon, j'ai une petite question : est-il possible de commencer à écrire au début d'un fichier plutot qu'a la fin ?
(soit c'est tout bete, soit je peux faire un nouveau topic si vous pensez que c'est nécessaire)..
Marci ! :hello:


Message édité par dcvlm le 11-03-2005 à 15:15:11

---------------
ZZZZzzzzz
n°1010487
jon301
Posté le 12-03-2005 à 10:02:28  profilanswer
 

Salut, pour le equals j'ai fais un ptit test chez moi et ca marche très bien avec lu.equals("new_topic" ); ...
voila le code si t'as envi d'essayer par toi même
 

import java.io.BufferedReader;
import java.io.FileReader;
 
public class Coucou {
   public static void main(String args[]) {
      String lu="";
      try {
         BufferedReader in = new BufferedReader(new FileReader("coucou.txt" ));  
         while(in.ready()){
            lu = in.readLine();
            if(lu.equals("new_topic" )) System.out.println("yeah" );
         }
      }
      catch(java.io.FileNotFoundException e) {
         System.exit(1);
      }
      catch(java.io.IOException e) {
         System.exit(1);
      }
   }
}

n°1010490
Taz
bisounours-codeur
Posté le 12-03-2005 à 10:08:14  profilanswer
 

while(in.ready()){
            lu = in.readLine();
            if(lu.equals("new_topic" ))
 
 
dommage, c'est toujours pas, ça fera toujours une NullPointerException ...
 
 
while((s = in.readLine()) != null)
   c'est pourtant pas compliqué
 
il serait de RTFM un minimum :o
 

n°1010578
jon301
Posté le 12-03-2005 à 13:21:57  profilanswer
 

et pourquoi ca ferait une exception ?
 
j'ai testé mon code et ça marche même avec un fichier vide
 
ce que tu as mis fonctionne aussi, mais pourquoi pas utiliser ready(), ca permet de savoir directement si le flux est prêt à etre lu
s'il renvoi faux c que le flux est fermé et donc que ya plus rien a lire... (fin de fichier)

n°1010581
Taz
bisounours-codeur
Posté le 12-03-2005 à 13:23:20  profilanswer
 

parce que in.readLine() peut toujours retourner null  ce que tu ne gères pas ...

n°1010628
jon301
Posté le 12-03-2005 à 14:31:35  profilanswer
 

dans quel cas readLine() retournerait null ?  
 
si on arrive en fin de fichier, ready() retournera faux donc on entre pas dans la boucle while,
donc le readLine() ne s'effectuera pas
donc pas de NullPointerException


Message édité par jon301 le 12-03-2005 à 14:38:13
n°1010789
benou
Posté le 12-03-2005 à 17:48:24  profilanswer
 

jon301 a écrit :

dans quel cas readLine() retournerait null ?  
 
si on arrive en fin de fichier, ready() retournera faux donc on entre pas dans la boucle while,
donc le readLine() ne s'effectuera pas
donc pas de NullPointerException


ton assertion est un peu bancale ... autant te baser sur la valeur retournée par readLine(), là c'est sûr.


---------------
ma vie, mon oeuvre - HomePlayer
n°1010824
jon301
Posté le 12-03-2005 à 18:15:02  profilanswer
 

je suis d'accord que la méthode de vérifier le retour de readLine() fonctionne
 
mais dans l'affaire, je veux juste dire qu'il existe la méthode ready(), qui a été créee exprès pour vérifier que ce genre de chose ne se produise pas
(vérification du flux entrant avant le readLine(), donc on aura jamais de NullPointerException)
 
 
enfin moi je ne fais qu'une suggestion, j'ai tester les 2 méthodes et   je sais très bien qu'elles marchent
c'est juste que je préfère faire ça avec les outils qui sont déjà à ma disposition
 
et puis il n'y a rien de bancale, tu n'auras qu'a faire tous les jeux d'essais possible par toi même, tu ne trouveras pas d'exception

n°1010826
Taz
bisounours-codeur
Posté le 12-03-2005 à 18:16:32  profilanswer
 

non ready() n'a pas été crée pour ce genre d'usage, justement.
 
Et justement tu pourras avoir des NullPointerException malgré le fait que ready() soit true.

n°1010831
Taz
bisounours-codeur
Posté le 12-03-2005 à 18:18:56  profilanswer
 

jon301 a écrit :


et puis il n'y a rien de bancale, tu n'auras qu'a faire tous les jeux d'essais possible par toi même, tu ne trouveras pas d'exception


y a rien à vérifier. la documentation dit que readLine() peut renvoyer null. et la documentation de ready() ne dit pas que ready() est vrai tant qu'on a pas atteint la fin de fichier, et non plus si un appel à readLine() ne reverra pas null.
 
j'invente rien, RTFM
http://java.sun.com/j2se/1.5.0/doc [...] eader.html

n°1010834
benou
Posté le 12-03-2005 à 18:19:58  profilanswer
 

ready() c'est juste pour savoir si le flux est immédiatement disposé à renvoyer quelque chose je crois ...en gros si son buffer n'est pas vide ...  
 
=> rien à vori avec un test valide sur la fin du fichier.
 
remarque quand même que contrarement à ce que dis taz, si ca retourne true, readLine retourne forcément autre chose que null, c'est plutot si ca retourne false que ca ne veut pas dire que readLine ne retournerait pas quelque chose de non null ...
 
en gros, là tu risques de ne pas lire la totalité de ton fichier.


---------------
ma vie, mon oeuvre - HomePlayer
n°1010835
benou
Posté le 12-03-2005 à 18:21:03  profilanswer
 
n°1010836
jon301
Posté le 12-03-2005 à 18:21:13  profilanswer
 

ok thx j'ai dla lecture  :(


Message édité par jon301 le 12-03-2005 à 18:21:51
n°1010838
benou
Posté le 12-03-2005 à 18:21:45  profilanswer
 

jon301 a écrit :

hmmmm
bon d'accord, et quand est ce que le readLine() retournerait null ?


jamais tu lis la doc ?


---------------
ma vie, mon oeuvre - HomePlayer
n°1010840
benou
Posté le 12-03-2005 à 18:23:57  profilanswer
 

jon301 a écrit :

hmmmm
bon d'accord, et quand est ce que le readLine() retournerait null ?


jamais tu lis la doc ?
 
 
edit : il a édité :o

jon301 a écrit :

ok thx j'ai dla lecture  :(


c'est mieux :jap:


---------------
ma vie, mon oeuvre - HomePlayer
n°1010851
jon301
Posté le 12-03-2005 à 18:34:24  profilanswer
 

Ok j'avais tord  :lol:  
 
readLine()
Returns:
A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
 
 
mais c bizzare, dns mon code jvérifiais pas que le retour de readLine() soit != null, donc ca aurait du lever une exception quand j'atteignais la fin de fichier  :??:

n°1010902
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 12-03-2005 à 19:39:56  profilanswer
 

dcvlm a écrit :

benou>> Non je n'ai pas compris pourquoi !
Si j'avais à connaissance la subtilité dont tu parlres --> bah j'aurais pensé à l'écire dans l'autre sens   :heink:  
 


 
String monObjet;
 
 
monObjet.equals("toto" ) => tu prends 'monObjet', un objet null, vu que tu n'as jamais écris quoi que ce soit dedans, et tu veux appeler une méthode nommée equals()... bref tu fais une sorte de NULL.equals("toto" ), et on peut difficilement demander au vide d'appeler la méthode equals()
 
Conclusion : NullPointerException
 
 
 
"toto".equals(monObjet) => tu prends "toto", c'est un objet de type String et non null vu qu'il "contient" le mot 'toto', donc tu appeles la méthode equals() de façon propre, depuis un objet qui existe. Bref tu fais une sorte de "toto".equals(NULL).... Après cet appel tout beau tout propre, la méthode equals() voit qu'on veut comparer toto avec NULL, et la conclusion est 'false' car dans 'toto' ya des lettres et pas dans null
 
Conclusion : Le code marche
 
Danger : "toto".equals(monObjet) se comportera de la même façon avec un objet NULL car jamais instancié (ca peut arriver dans un code pas propre), ou avec une string vide (et là par contre cela peut être une comparaison volontaire, parfois on récupère ""  [:spamafote] )... on a le même comportement pour 2 choses différentes, ce n'est pas forcément une bonne chose


Message édité par Xavier_OM le 12-03-2005 à 19:42:50

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°1010903
schnapsman​n
Zaford Beeblefect
Posté le 12-03-2005 à 19:44:37  profilanswer
 


non sense! phaique! bot!  :o  


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°1010907
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 12-03-2005 à 19:48:44  profilanswer
 

schnapsmann a écrit :

non sense! phaique! bot!  :o


 
 :lol:  :D  tu écrirais quoi toi pour expliquer ca ? Que c'est un pointeur vers null ? Pas sur qu'il connaisse les pointeurs


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°1010910
schnapsman​n
Zaford Beeblefect
Posté le 12-03-2005 à 19:51:28  profilanswer
 

Xavier_OM a écrit :

:lol:  :D  tu écrirais quoi toi pour expliquer ca ? Que c'est un pointeur vers null ? Pas sur qu'il connaisse les pointeurs


c'est une référence invalide sans instance derrière, c'est tout [:petrus75]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°1011019
benou
Posté le 12-03-2005 à 23:33:39  profilanswer
 

schnapsmann a écrit :

c'est une référence invalide sans instance derrière, c'est tout [:petrus75]


tais toi, tôa :o
 
Xavier s'est fait chier à faire un gros post pour bien expliquer, alors respect :o
:jap:


---------------
ma vie, mon oeuvre - HomePlayer
n°1011648
nraynaud
lol
Posté le 13-03-2005 à 23:54:53  profilanswer
 

schnapsmann a écrit :

non sense! phaique! bot!  :o


tu rames ou quoi ? null peut être vu comme un singleton (à cause du ==) d'une classe qui hérite de toutes les classes et interfaces du système (et cette classe existe réellement en Eiffel par exemple) et qui déclenche une NPE pour toutes les méthodes qu'elle implémente.
 
Cette approche permet entre autre dans le traitement des types et des variables de ne pas avoir de singularités à cause de la valeur null.
 
 
Il est absolument essentiel d'essayer de faire ce type de généralités quand on développe.
 

benou a écrit :

tais toi, tôa :o
 
Xavier s'est fait chier à faire un gros post pour bien expliquer, alors respect :o
:jap:


il aurait pu ouvrir le débat en parlant de l'approche d'Eiffel et de C++ par exemple :o


---------------
trainoo.com, c'est fini
n°1012447
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 14-03-2005 à 18:58:46  profilanswer
 

nraynaud a écrit :

tu rames ou quoi ? null peut être vu comme un singleton (à cause du ==) d'une classe qui hérite de toutes les classes et interfaces du système (et cette classe existe réellement en Eiffel par exemple) et qui déclenche une NPE pour toutes les méthodes qu'elle implémente.
 
Cette approche permet entre autre dans le traitement des types et des variables de ne pas avoir de singularités à cause de la valeur null.
 
 
Il est absolument essentiel d'essayer de faire ce type de généralités quand on développe.
 
 
il aurait pu ouvrir le débat en parlant de l'approche d'Eiffel et de C++ par exemple :o


 
a toi l'honneur  :jap:  
 :D


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°1014079
schnapsman​n
Zaford Beeblefect
Posté le 16-03-2005 à 00:33:45  profilanswer
 

tain mes les singularités, c'est pas sale bordel [:mlc](rien qu'à voir sur ce forum, y en a tout plein)


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°1014088
the real m​oins moins
Posté le 16-03-2005 à 00:46:17  profilanswer
 

schnapsmann a écrit :

tain mes les singularités, c'est pas sale bordel [:mlc](rien qu'à voir sur ce forum, y en a tout plein)


http://www.refactoring.com/catalog [...] bject.html :p
 
(http://www.owlnet.rice.edu/~comp212/00-spring/handouts/week06/null_object_revisited.htm,  
http://martinfowler.com/eaaCatalog/specialCase.html)


Message édité par the real moins moins le 16-03-2005 à 00:51:08

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1014151
nraynaud
lol
Posté le 16-03-2005 à 08:35:58  profilanswer
 

Je savais même pas que ça avait un nom ce pattern /o\
 


---------------
trainoo.com, c'est fini
n°1014160
dcvlm
Yep
Posté le 16-03-2005 à 08:52:47  profilanswer
 

Donc voilà mon problème avec le split !!!
 

Code :
  1. String lu="";
  2.         out.println("<table>" );
  3.         while(lu!=null)
  4.         {
  5.          lu=in.readLine();
  6.          if("new_topic".equals(lu)){  out.println("<tr><td><hr></td></tr>" ); }
  7.          else
  8.          {
  9.             String[] result = lu.split("expression reg" );
  10.             for (int x=0; x<result.length; x++)
  11.             out.println("<tr><td>"+result[x]+"</td></tr>" ); 
  12.          }
  13.         }
  14.         out.println("</table>" );


 
Et pas de bol, ca me balance encore un npe !!!  :fou:  :fou:  
 
Et, meme fort de l'enrichissement précédent....je ne vois pas comment retourner mon

lu.split("expression reg" )

!!!
Ca doit être la "nature" de lu qui doit être bizarre (mais je vois asbolument pas pkoi !!!), parce que pour me rassurer je me suis essayé au split ailleurs qd ds le cas d'une lecture de fichier, et ca marchait très bien !  :(  
 
En attente de vos idées géniales :)


---------------
ZZZZzzzzz
n°1014166
replix
Posté le 16-03-2005 à 09:01:34  profilanswer
 

Pourquoi est-ce que tu ne fais pas de debugging pour regarder exactement ce qui se passe?


---------------
Gestion de bug en mode ASP/java : http://eap.bug-sweeper.fr
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  NullPointerException avec la methode equals et split !!!! [Résolu]

 

Sujets relatifs
Probleme de comparaison #2 [resolu][resolu]Probleme de comparaison
[RESOLU] [CSS] aligner deux DIV sans position absolu ???Lecture d'un fichier et copie dans un buffer, ultra lent ! [Resolu]
[resolu] [JSP][Tomcat 5] Problème lors du passage de paramètres ?[Résolu][HTML] Largeur de contenu d'une iframe
[java][Resolu] Probleme lecture de fichier[RESOLU]PHP-LDAP fonction ldap-rename
[Java] Marche en 1.5, marche pas en 1.4 [résolu][Résolu] [MySQL] Connaître la taille max d'un champ text
Plus de sujets relatifs à : NullPointerException avec la methode equals et split !!!! [Résolu]


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