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

avec Java Discussion :

probleme avec StringTokenizer


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut probleme avec StringTokenizer
    bonjour,
    voici mon probleme :
    je souhaite utiliser stringtokenizer pour separer les champs des lignes d'un fichier en lecture, et m'en servir pour construire une liste d'objet de TypeA, le souci est que dans mes ligne j'ai des chaine de caractere et des nombres, voici un morceau de mon code
    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
     
    BufferedReader entree = new BufferedReader(new FileReader("monfichier.txt"));
            while (true)
            {
                String lignelue = entree.readLine();
                if (lignelue==null) break;
                StringTokenizer tok = new StringTokenizer(lignelue, "\t");
                int nb = tok.countTokens();
                //System.out.println(nb);
                for (int i=0; i<nb; i++)
     
                {
                    TypeA stat = new TypeA();
                   stat.nom = tok.nextToken();
                   stat.coordonnees[0]= tok.nextToken();
                   stat.coordonnees[1]= tok.nextToken();
    }
                   entree.close();
    }

    ma classe TypeA:
    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 class TypeA {
        private double[] coordonnees;
        private String nom;
     
     
        public TypeA ()
        {
            nom = " ";
            coordonnees = new double[2];
            coordonnees[0]=0;
            coordonnees[1]=0;
        }
    }
    je tien juste a signaler que j'ai essayer le code suivant:
    stat.coordonnees[0]= Double.parseDouble(tok.nextToken());
    et que ca me leve toujours une exception a l'execution :
    Exception in thread "main" java.lang.NumberFormatException: For input string: "Abbesses"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
    at java.lang.Double.parseDouble(Double.java:482)

    merci a tous.

    edit: voici a quoi ressemble les les lignes de mon fichier :
    Abbesses 48.88484851763018 2.338687777519226

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class TypeA {
        private double[] coordonnees;
        private String nom;
     
     
        public TypeA (String nom, double premier,double second)
        {
            this.nom = nom;
            coordonnees = new double[2];
            coordonnees[0]=premier;
            coordonnees[1]=second;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                String lignelue = entree.readLine();
                String[] tab = lignelue.split("\\s");//place les éléments du string dans un tableau de string
     
                TypeA stat = new TypeA(tab[0],tab[1],tab[2]);
     
    }
    java.lang.NumberFormatException: For input string: "Abbesses"

    java.lang.NumberFormatException : il n'arrive pas à transformer en nombre
    For input string: "Abbesses" : en l'occurrence ici "Abbesses" .

    Un peu normal qu'il ne puisse pas te dire à quoi équivaut "Abbesses" en nombre
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    merci pour ton aide mais j'ai toujours un probleme de type, dans ma classe TypeA j'ai un tableau de double, alors que je split ma ligne en tableau de string.

    ce que j'essaie de faire est de construire des objet de TypeA ( String nom, double premier, double second) a partir de mon fichier en recuperant le champs string dans nom, le 1er nombre dans premier et le 2eme nombre dans second.

    si ya un probleme dans ma methode d'aborder le probleme n'hesite pas l'abondonner, je suis ouvert a toutes propositions.

    edit :
    Citation Envoyé par Ivelios Voir le message


    java.lang.NumberFormatException: For input string: "Abbesses"

    java.lang.NumberFormatException : il n'arrive pas à transformer en nombre
    For input string: "Abbesses" : en l'occurrence ici "Abbesses" .

    Un peu normal qu'il ne puisse pas te dire à quoi équivaut "Abbesses" en nombre
    en fait ce que je comprend pas c'est pourquoi il essaie toujours de lire la 1ere sous-chaine qui est normalement deja rangé dans stat.nom, il doit normalement passer au 2eme token et la la conversion avec Double.parseDouble doit se faire puisque c'est un nombre, je suis vraiment perdu la

  4. #4
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Oups pardon petite erreur de ma part
    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeA stat = new TypeA(tab[0],tab[1],tab[2]);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeA stat = new TypeA(tab[0],Double.parseDouble(tab[1]),Double.parseDouble(tab[2]));

    en fait ce que je comprend pas c'est pourquoi il essaie toujours de lire la 1ere sous-chaine qui est normalement deja rangé dans stat.nom, il doit normalement passer au 2eme token et la la conversion avec Double.parseDouble doit se faire puisque c'est un nombre, je suis vraiment perdu la
    J'aime pas les StringTokenizer
    La méthode split est beaucoup plus simple d'utilisation, C'est un point de vue personnel bien entendu. Mais par expérience...Bref, je ne c'est pas pourquoi ton code ne marche pas, je n'ai pas le bagage nécessaire avec les Stringtokenizer
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    je te remercie vraiment beaucoup Ivelios, mais le probleme est resolu:

    le probleme apparament etait dans ma boucle for, en effet la boucle prend toujours le 1er token peut importe l'itteration (bizzare), j'ai fait un test et meme si je prends la derniere itération ca m'affiche la 1er et si je prend la 1ere ben ca m'affiche la 1ere, donc je me suis debarassé de la boucle et tout marche a merveille.

    merci pour l'assistance, et a bientot mon projet n'ai qu'a son debut et je sens que je vais poster beaucoup cette semaine ^^

  6. #6
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par ungasquipasse Voir le message
    bonjour,
    voici mon probleme :
    je souhaite utiliser stringtokenizer pour separer les champs des lignes d'un fichier en lecture, et m'en servir pour construire une liste d'objet de TypeA, le souci est que dans mes ligne j'ai des chaine de caractere et des nombres, voici un morceau de mon code
    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
     
    BufferedReader entree = new BufferedReader(new FileReader("monfichier.txt"));
            while (true)
            {
                String lignelue = entree.readLine();
                if (lignelue==null) break;
                StringTokenizer tok = new StringTokenizer(lignelue, "\t");
                int nb = tok.countTokens();
                //System.out.println(nb);
                for (int i=0; i<nb; i++)
     
                {
                    TypeA stat = new TypeA();
                   stat.nom = tok.nextToken();
                   stat.coordonnees[0]= tok.nextToken();
                   stat.coordonnees[1]= tok.nextToken();
    }
                   entree.close();
    }

    ma classe TypeA:
    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 class TypeA {
        private double[] coordonnees;
        private String nom;
     
     
        public TypeA ()
        {
            nom = " ";
            coordonnees = new double[2];
            coordonnees[0]=0;
            coordonnees[1]=0;
        }
    }
    je tien juste a signaler que j'ai essayer le code suivant:
    stat.coordonnees[0]= Double.parseDouble(tok.nextToken());
    et que ca me leve toujours une exception a l'execution :
    Exception in thread "main" java.lang.NumberFormatException: For input string: "Abbesses"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
    at java.lang.Double.parseDouble(Double.java:482)

    merci a tous.

    edit: voici a quoi ressemble les les lignes de mon fichier :
    Abbesses 48.88484851763018 2.338687777519226
    Je connais pas bien StringToketruc mais rien qu a voir ta boucle ca sent le sapin.
    Essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    BufferedReader entree = new BufferedReader(new FileReader("monfichier.txt"));
    String ligneLue = null;
    StringTokenizer tok = null;
    TypeA typeA = null;
    while((ligneLue = entree.readLine()) != null){
      tok = new StringTokenizer(ligneLue, "\t");
      int i = 0;
      while(i< tok.countTokens()){
       typeA = new TypeA(tok.nextToken(), Double.parseDouble(tok.nextToken()), Double.parseDouble(tok.nextToken()));
       i = i + 3;
      }
    }
    entree.close();
    Attention, ca ne marche que si la longueur de tok est un multiple de 3 ET si les 2ieme et 3ieme tok.nextToken() peuvent etre parser en double.
    De plus, ici on ecrase a chaque fois typeA... il serait peut etre interessant de les stocker au fait et a mesure dans une list pour s en servir.
    Les nombres sont peut etre trop "grande" pour double, tu devrai regarder du cote de BigDecimal(String val).
    Edit: petite erreur sur l usage de tok
    La javaDoc est mon amie, elle est la tienne aussi!

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

Discussions similaires

  1. Probleme avec StringTokenizer
    Par LP-mpascolo dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2008, 09h24
  2. Probleme avec FileInputStream et StringTokenizer
    Par LinuxUser dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 31/12/2007, 00h29
  3. Problemes avec StringTokenizer
    Par michaelbob dans le forum Langage
    Réponses: 15
    Dernier message: 16/08/2006, 14h06
  4. [StringTokenizer] [delimiteur]Probleme avec le delimiteur!
    Par fabszn dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 27/05/2006, 17h49
  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