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

Langage Java Discussion :

StringIndexOutOfBoundsException, trim et equals


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut StringIndexOutOfBoundsException, trim et equals
    Bonjour à tous.

    Alors oui je sais, le titre de ce sujet n'est pas très explicite mais c'est assez complexe de résumer en 1 ligne.

    Voici mon problème, j'ai une StringIndexOutOfBoundsException avec comme valeur passée à un substring -1, jusque là c'est possible.

    Mais voici le code concerné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		for (String word : words) {
    			if (!word.trim().equals("")) {
    				String lastChar = word.substring(word.length()-1);
    				if (lastChar.equals(".") || lastChar.equals("'")) {
    					inputStreet += word;
    				} else {
    					inputStreet += word+ " ";
    				}
    			}
    		}
    La ligne concernée semble être if (!word.trim().equals("")) mais j'imagine que c'est plutôt celle du dessous.
    Seulement... comment pourrais-je avoir un length = 0 si je suis passé dans la condition?

    Je soupçonne un problème de charset (words provient d'une saisie d'utilisateur) mais j'aimerai en être vraiment certain.

    Merci d'avance!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    La classe String est immuable, quand tu appel trim() le string word ne change pas mais tu as une autre référence avec laquelle tu compare avec ""
    fallait faire plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for (String word : words) {
                            if (word == null) continue; //faire attention au NullPointerException
                            word = word.trim(); // <-- C'EST CE QUI MANQUAIT
    			if (!word.equals("")) {
    				String lastChar = word.substring(word.length()-1);
    				if (lastChar.equals(".") || lastChar.equals("'")) {
    					inputStreet += word;
    				} else {
    					inputStreet += word+ " ";
    				}
    			}
    		}
    A+-

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Je suis bien d'accord que j'ai une autre référence... mais en quoi cela change-t'il le contenu?

    Oui effectivement, je peux avoir une différence de longueur entre word et word.trim()... mais si word.trim() n'est pas égal à une chaine vide, word non plus!

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Si par exemple word vaut " " alors word.trim() vaut bien "" et ne passera pas dans ton if.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Citation Envoyé par Uther Voir le message
    Si par exemple word vaut " " alors word.trim() vaut bien "" et ne passera pas dans ton if.
    En effet oui... c'est bien logique
    Mais ça n'explique pas le soucis ici

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Si tu as une chaine vide qui passe dans ton if, alors word.length()-1 vaudra -1 et donc logiquement, il y a un StringIndexOutOfBoundsException.

Discussions similaires

  1. [debutant][struts]: utilisation du tag <logic:equal ...&g
    Par sleepy2002 dans le forum Struts 1
    Réponses: 13
    Dernier message: 23/11/2006, 17h04
  2. [STRUTS] Tag Equal, comparer deux variables
    Par logica dans le forum Struts 1
    Réponses: 2
    Dernier message: 04/06/2004, 12h01
  3. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04
  4. Equivalent de la fonction trim
    Par PCHINK dans le forum C
    Réponses: 6
    Dernier message: 21/03/2004, 18h02
  5. trim
    Par divableue dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/11/2003, 14h01

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