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 :

Problème avec StingTokenizer vers tableau de String [Débutant(e)]


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec StingTokenizer vers tableau de String
    Bonjour,

    Voilà j'ai créé un nouveau StringTokenizer avec donc un message en String et un délimiteur genre "#".

    Ce que je voudrais c'est pouvoir récupérer dans un tableau de String, chaque chaine de caractères de ce message présente entre les délimiteurs. J'ai donc le code qui suit :

    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
    int i = 0;
    		try {
    			tokenToGetField = new StringTokenizer(message, delimiter);
    			while(tokenToGetField.hasMoreTokens() == true)
    			{				
    				String temp;
    				temp = tokenToGetField.nextToken();
    				fields[i] = temp;
    				System.out.println(fields[i]);
    				i++;
    			}
    		}catch(NoSuchElementException e)
    			{ System.out.println("Error n°1 when we want to get a field from the message"); }
    		catch (NullPointerException ee)
    			{ System.out.println("Error n°2 when we want to get a field from the message"); }
    Ca me créer une exeption du NullPointerException et je ne comprend pas pourquoi...

    Si je change le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while(tokenToGetField.hasMoreTokens() == true)
    			{				
    				String temp;
    				temp = tokenToGetField.nextToken();
    				fields[i] = temp;
    				System.out.println(fields[i]);
    				i++;
    			}
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(tokenToGetField.hasMoreTokens() == true)
    			{				
    				System.out.println(tokenToGetField.nextToken());
    			}
    Là je n'ai plus de problème, ça s'affiche bien...


    Une idée ?

    Merci pour l'aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut
    pk ce compliquer la vie ?
    La fonction Split() de String semble faire ce que tu veux si j'ai bien compris.
    http://java.sun.com/j2se/1.4.2/docs/...Tokenizer.html
    donne un exemple de l'utilisation de Split.

    Ensuite j'ai fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static void main(String args[]) 
    	{
    		StringTokenizer tokenToGetField = new StringTokenizer("totot#trtrtr#","#");
    		String[] fields=new String[10];
    		int i=0;
    		while(tokenToGetField.hasMoreTokens())
    		{				
    			String temp;
    			temp = tokenToGetField.nextToken();
    			fields[i] = temp;
    			System.out.println(fields[i]);
    			i++;
    		}
    	}
    Ca marche nikel. Le soucis c'est que tu utilises un tableau. Tu es obligé de connaitre la taille de ton tableau avant de le remplir.
    Si tu ne peux pas connaitre la taille avant, autant utiliser une liste.

    ++

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Où est initialisé le tableau fields[] ?
    De quelle ligne vient l'erreur (affiche la trace de l'exception) ?
    Pourquoi ne pas utiliser la méthode split() de la classe String ? [edit] grilled [/edit]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon je fais vite avec de me faire sortir avec un coup de pied au derrière ...

    J'avais oublié d'initialiser le tableau...

    Merci à vous 2 pour votre aide si rapide

    Par contre, le fait d'utiliser String et sa méthode Split c'est mieux (plus rapide) que d'utiliser un StringTokenizer ?

  5. #5
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par nicofromChina
    Bon je fais vite avec de me faire sortir avec un coup de pied au derrière ...

    J'avais oublié d'initialiser le tableau...

    Merci à vous 2 pour votre aide si rapide

    Par contre, le fait d'utiliser String et sa méthode Split c'est mieux (plus rapide) que d'utiliser un StringTokenizer ?
    Si la finalité c'est d'obtenir un tableau de String alors autant utiliser le split, y'a besoin de moins de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] fields= "totot#trtrtr#".split("#");
    équivalent à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    StringTokenizer tokenToGetField = new StringTokenizer("totot#trtrtr#","#");
    String[] fields=new String[10];
    int i=0;
    while(tokenToGetField.hasMoreTokens())
    {				
    	String temp;
    	temp = tokenToGetField.nextToken();
    	fields[i] = temp;
    	System.out.println(fields[i]);
    	i++;
    }
    C'est quand même plus court, non?

    Par contre, attention quand tu exprime le délimiteur en paramètre de split car split utilise les expressions régulières.

    En performance pure, il doit pas y avoir une différence flagrante entre les 2, surtout pour un motif aussi simple.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir.

    Une ptite question concernant split. Le délimiteur peut il contenir n'importe quel caractère ? Car j'ai des problème lorsque j'utilise une chaine de caractères comme délimiteur, contenant par exemple un "\" ou "*" ou "$" ...


    EDIT : ok Descent je viens de relire la fin de ton message. J'ai regardé dans le tuto que tu m'a donné, et j'en déduit que je ne peux pas les utiliser. Il n'y a vraiment aucun moyen ?

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    '\', '*' et '$' font partie des caractères réservés des expressions régulières (plus d'info dans la javadoc de la classe Pattern).

    Pour les utiliser en temps que caractère propre tu dois les échapper avec le caractère '\' (voir aussi Pourquoi dois-je doubler/quadrupler le caractère anti-slash ('\') ?).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. Problème avec type et tableau
    Par semaj_james dans le forum Ada
    Réponses: 2
    Dernier message: 21/02/2007, 15h31
  2. Problème avec Excel et tableau croisé dynamique
    Par françois62 dans le forum VBScript
    Réponses: 9
    Dernier message: 19/11/2006, 22h17
  3. Problème avec un switch contenant des strings
    Par dessinateurttuyen dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2006, 12h56
  4. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48

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