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 :

Problème avec StringTokenizer


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Dév FrontEnd
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Dév FrontEnd

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Par défaut Problème avec StringTokenizer
    Bonjour,

    Je récupère une chaîne de caractère provenant d'un formulaire web et je dois la parser. Mais je rencontre un soucis avec StringTokenizer.

    En effet, ma chaîne a la forme suivante : val1#-!val2#-!val3
    Je créés un StringTokenizer de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringTokenizer st = new StringTokenizer(ma_chaine, "#-!", false);
    Mais le problème, c'est que si ma chaîne contient un '-', alors elle n'est pas bien parsée ...

    Exemple : val-1#-!val2#-!val3 --> va me donner les tokens suivants : val, 1, val2, val3 ...

    Alors que logiquement (enfin, je pense), il devrait me retourner : val-1, val2, val3.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Par défaut
    Salut,

    il faut prendre le temps de lire la javadoc. Avec StringTokenizer tu spécifies un ensemble de caractères de séparation et non une chaine. Il prend donc n'importe quels caractères parmi les 3 pour séparer les éléments.
    De plus maintenant il vaut mieux utiliser la méthode split() de la classe String qui au passage correspond à ton besoin.

  3. #3
    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
    pourquoi ne pas tous simplement utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] val = st.split("#-!");

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par pontus21 Voir le message
    Alors que logiquement (enfin, je pense), il devrait me retourner : val-1, val2, val3.
    Non non : chaque caractère du délimiteur est indépendant. Bref StringTokenizer ne découpe pas selon la chaine "#-!" mais selon les caractères '#', '-' ou '!'...

    Il est préférable d'utiliser les Patterns, en protégeant bien les caractères qui pourraient être interprété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	for (String str : machaine.split( Pattern.quote("#-!") ) ) {
    		System.out.println(str);
    	}
    Attention car les patterns utilisent un grand nombre de caractères spéciaux. Pattern.quote() permet d'éviter qu'ils soient interprétés.


    Sinon on peut également utiliser des indexOf()...

    a++


    [edit] Bien grillé

  5. #5
    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
    Dans ce cas précis Pattern.quote() n'est pas indispensable étant donné que #, - et ! ne sont pas des caractères spéciaux.

    Ceci dit il est vrai que si on veux utiliser un autre délimiteur et que l'on ne connais pas les expressions régulières, il est plus prudent de l'utiliser.

  6. #6
    Membre éclairé
    Profil pro
    Dév FrontEnd
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Dév FrontEnd

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Par défaut
    Merci beaucoup pour ces réponses.
    Je vais tester ça.

    Edit : Résolu ! Encore merci.

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

Discussions similaires

  1. Problème avec StringTokenizer
    Par DjeXtoR dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 27/11/2008, 09h20
  2. Petit problème avec StringTokenizer
    Par mygwel dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2006, 18h22
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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