IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Comment tester qu'un objet String est bien initialisé


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Informaticien
    Inscrit en
    Septembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Septembre 2002
    Messages : 69
    Points : 63
    Points
    63
    Par défaut Comment tester qu'un objet String est bien initialisé
    Salut,

    me voila confronté à un nouveau problème. C'est pas trés grave parce que je peut faire autrement mais c'est tout de même quelque chose d'assez essentiel à mon avis.

    Alors j'ai une page JSP qui appelle une classe jave pour lui envoyer les valeurs saisies dans un formulaire. Ca c'est OK.

    Ensuite dans ma classe je récupere ces valeurs sous cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String noB = req.getParameter("NoB"); 
    String noI = req.getParameter("NoI");
    Puis je passe en revue les différents champs de mon formulaire pour constuire ma requête.
    Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (noB.length()!=0)			
        Requete += " AND NoB='" + noB + "'";
    if (noI.length()!=0)
        Requete += " AND NoI='" + noI + "'";
    Problème: Si le champ NoI n'a pas été renseigné dans le formulaire j'ai un plantage sur NoI.length().
    Je comprend bien pourquoi ca plante, mais je fais comment pour savoir si NoI contient une valeur : :

    J'ai cherché un peu partout sans succés alors je me tourne vers vous. Merci

  2. #2
    Membre habitué
    Profil pro
    ingenieur
    Inscrit en
    Avril 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur

    Informations forums :
    Inscription : Avril 2002
    Messages : 207
    Points : 128
    Points
    128
    Par défaut
    Tu tests avant si ta chaine est differente de null !

    if ( noB != null && noB.length > 0 )
    .....

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (NoI==null) {
         // NoI n'est pas present dans l'URL
    }
     
     
    if ("".equals(NoI)) {
          // NoI est present dans l'URL mais il est vide
    }

    a++

  4. #4
    Membre habitué
    Profil pro
    ingenieur
    Inscrit en
    Avril 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur

    Informations forums :
    Inscription : Avril 2002
    Messages : 207
    Points : 128
    Points
    128
    Par défaut
    Je crois qu'il vaut mieux tester si la taille de la chaine est > 0 que de tester si la chaine est differente de "" !
    Tu dois gagner 0,0001 secondes

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    if ("".equals(NoI)) {
    // NoI est present dans l'URL mais il est vide
    }
    A le léger avantage de ne JAMAIS générer de NullPointreException, car la méthode equals s'applique ici à l'objet "" qui existe forcément.
    NoI peut ne pas exister dans l'url, celà ne change rien.

    De plus, la JVM range correctement les litéraux, si tu utilise partout cette technique, tu n'auras qu'une et une seule instance de chaine vide litérale donc, ne t'inquiète pas trop pour celà.

    Autre chose, l'appel de la méthode de comparaison equals risque fort de ne jamais être appelée si ton objet est vide car celle-ci est optimisée avec les hashcode. Pour qu'equals soit invoké, il faut que le hashcode des 2 objets à comparé soit identique. Je doute fort que les hashcodes de "" et null retourne la même chose :p

  6. #6
    Membre du Club
    Profil pro
    Informaticien
    Inscrit en
    Septembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Septembre 2002
    Messages : 69
    Points : 63
    Points
    63
    Par défaut
    Bien je vois que pour un sujet a priori simple les avis sont multiples.

    Alors je vais essayé un peu tout mais particulieremnt cette histoire d'objet "".

    On peut donc utiliser l'objet 'chaine vide' ??
    Pas besoin de l'instancier ??

    Je fais l'étonné parce que jamais entendu parler ni en Java ni dans un autre langage.

    Avec des trucs comme ca je suis sur de me coucher moins ce soir

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    est l'écriture simplifiée de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str = new String("Hello");
    ou, plus précidement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str = new String(new char[] {'H','e','l','l','o'});
    Sans cette simplification accordée par le compilateur, java serais déjà aux oubliettes ;p

    Donc, garde à l'espris que "Hello" est un objet String.

    Toutes syntaxe du type suivant est donc authorisée !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int len = "Hello".length();
    String nom = "  Alwin   ".toUppercase().trim();

  8. #8
    Membre du Club
    Profil pro
    Informaticien
    Inscrit en
    Septembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Septembre 2002
    Messages : 69
    Points : 63
    Points
    63
    Par défaut
    Merci pour ces précisions. j'ai commencé avec le langage C et c'est devenu mon langage de "référence". Donc ce que tu m'as décrit me parle plus.

    J'ai essayé un peu les différentes méthodes. Chacune s'avére plus ou moins pertinente en fonctin des cas. En tout cas ca m'as permi de faire un rapide tour des possibilités de contrôle d'une chaine vide ou null.

    Merci beaucoup

    Jones

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Pour information encore, tu a une bibliothèque disponible ou toutes sorte de méthodes sont déjà faites.

    common-lang dispo sur le site de Jakarta
    Tu trouveras ton bonneur dans la classe StringUtils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment tester si un objet est instancié?
    Par ostralo dans le forum C++
    Réponses: 8
    Dernier message: 26/01/2009, 15h49
  2. Je veux tester que ce String est bien un double
    Par poulette3000 dans le forum Langage
    Réponses: 5
    Dernier message: 31/07/2007, 12h03
  3. [C#]Question bête : Comment tester si un objet est créer?
    Par ben_ghost dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/08/2006, 20h50
  4. [XML]Comment tester que mon fichier XML est comme ceci?
    Par Devil666 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/06/2005, 13h41
  5. Comment savoir si une impression s'est bien déroulé?
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/11/2003, 20h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo