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

Collection et Stream Java Discussion :

[StringTokenizer] [delimiteur]Probleme avec le delimiteur!


Sujet :

Collection et Stream Java

  1. #1
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut [StringTokenizer] [delimiteur]Probleme avec le delimiteur!
    Hello,

    Je rencontre un sous avec la classe StringTokenizer.


    Je souhaiterai découper ma chaine de caractère avec la classe StringTokenizer en utilisant comme délimiteur <br>.

    Pour information je suis sous le jdk 1.3 (sans possibilité de changer de version)


    Le problème est que le traitement effectué par cette classe ne tient pas compte des caractères <>, c'est à dire qu'il troncone la chaine de caractère de la ma manière suivante :

    Code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    package com.fabszn;
     
    import java.util.Iterator;
    import java.util.StringTokenizer;
     
    public class EssaiToken {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    		String c = "fabrice@toto<br>beatrice@titi.fr<br>michel<br>louis@tutu.fr";
    		StringTokenizer t = new StringTokenizer(c,"<br>");
    		for ( ; t.hasMoreElements();)
    		{
    			String element = (String)t.nextElement();
    			System.out.println("element = " +  element);
     
    		}
    	}
     
    }
    résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    element = fa
    element = ice@toto
    element = eat
    element = ice@titi.f
    element = michel
    element = louis@tutu.f
    On peut s'apercevoir que le StringTokenizer découpe la chaine selon les br et non selon <br>.
    Je ne sais pas trop comment faire pour palier simplement à ce problème.

    Je pourrais faire parser la chaine et la tronconer manuellement.. mais j'avoue que j'aimerai ne pas alourdir le code avec ce genre de traitement.

    Est ce qu'il existe un caractère d'échappement permettant d'indiquer au StringTokenizer qu'il doit tenir compte des <>?

    J'aimerai, si possible, ne pas utiliser de lib externe!

    Merci d'avance pour votre aide!

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Hello,

    le problème que tu rencontres, je l'ai eu moi aussi.

    La cause est que la chaîne passée dans le stringtokenizer ne correspond pas à une chaîne complète, mais à tous les caractères sur lesquelles découper la chaine.

    Je ne suis pas très limpide, je sais. Pour faire simple, lorsque tu passes "<br>", le stringtokenizer vas découper la chaîne à tous les caractères "<", puis "b", puis "r", puis ">".

    Si tu découpe la chaîne "<bbbbbbbbbbbbbbbrrrrrrrrrrrrrrrrrrrrrrrr>" avec "<br>", tu ne devrais rien récupérer.

    cf. la javadoc, où c'est expliqué

  3. #3
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Merci pour ta réponse!

    j'avais regardé la javadoc... mais je n'avais pas lu en détail..

    Donc j'en déduis qu'il n'y a pas de solution toute faite..

    Je vais faire le traitement manuellement..
    Et j'en profiterai pour faire un code générique et le diffusé par la suite.

    Comme ca, ce sera du developpement utile

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Alors voilà je suis tombé sur le meme probleme que vous...et du coup je me demandais où en etait l'avancement du code de cette solution ;-)
    Parce que moi je ne vois pas du tout...

    Merci !!

  5. #5
    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,


    Avec le JDK 1.3 , tu peux toujours utiliser les regexp du projet Jakarta : http://jakarta.apache.org/regexp/index.html

    Sinon ce n'est pas très compliqué de faire la même avec indexOf() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        public static String[] split(String string, String separator) {
            int start = 0;
            int index = string.indexOf(separator);
            List list = new ArrayList();
     
            while (index >= 0) {
                list.add(string.substring(start, index));
                start = index + separator.length();
                index = string.indexOf(separator, start);
            }
            list.add(string.substring(start));
            return (String[]) list.toArray(new String[list.size()]);
        }
    a++

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

Discussions similaires

  1. StringTokenizer avec " comme delimiteur
    Par riadhhwajdii dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 16/07/2009, 15h56
  2. Probleme avec FileInputStream et StringTokenizer
    Par LinuxUser dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 31/12/2007, 00h29
  3. Supprimer les derniers caracteres avec comme delimiteur le \
    Par kenny49 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/05/2007, 11h10
  4. Problemes avec StringTokenizer
    Par michaelbob dans le forum Langage
    Réponses: 15
    Dernier message: 16/08/2006, 14h06
  5. [stringtokenizer] probleme avec champs vides
    Par gege2mars dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2004, 08h25

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