Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1152 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  string tokenizer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

string tokenizer

n°394564
okeefe
Posté le 15-05-2003 à 04:09:52  profilanswer
 

j'ai un fichier rech1.txt qui a dedans
 

Code :
  1. 7616
  2. 245484
  3. 68001
  4. 48094
  5. 207176
  6. 109156
  7. 61705
  8. 178895
  9. 39946
  10. 86435
  11. 96971
  12. 210439
  13. 102092
  14. 43927
  15. 106402
  16. 7616
  17. 4567
  18. 2629
  19. 2928
  20. 780
  21. 2728
  22. 2167
  23. 2412
  24. 2992
  25. 2251
  26. 2508
  27. 2835
  28. 2702
  29. 2714
  30. 2651
  31. 2976
  32. 2966
  33. 2096
  34. 2222
  35. 2136
  36. 2413

 
 
pour lire ce fichier je fais
 
 

Code :
  1. public void lirefichiertri(){
  2.     String NomFichier = "rech1.txt";
  3.     try{
  4.       BufferedReader in  = new BufferedReader(new FileReader(NomFichier));
  5.       String str = "test";
  6.       int i=0;
  7.       while (str != null) {
  8.         str = in.readLine();
  9.         StringTokenizer st = new StringTokenizer(str," " );
  10.         while(st.hasMoreTokens())
  11.           tab[i] = Integer.parseInt(st.nextToken());
  12.         System.out.println("Token lu = " + tab[i]);
  13.         i++;
  14.       }
  15.       in.close();
  16.     }
  17.     catch(Exception e){
  18.       e.printStackTrace();
  19.     }
  20.   }

 
 
avec ça j'obtiens
 
 

Code :
  1. Token lu = 7616
  2. Token lu = 245484
  3. Token lu = 68001
  4. Token lu = 48094
  5. Token lu = 207176
  6. Token lu = 109156
  7. Token lu = 61705
  8. Token lu = 178895
  9. Token lu = 39946
  10. Token lu = 86435
  11. Token lu = 96971
  12. Token lu = 210439
  13. Token lu = 102092
  14. Token lu = 43927
  15. Token lu = 106402
  16. Token lu = 7616
  17. Token lu = 4567
  18. Token lu = 2629
  19. Token lu = 2928
  20. Token lu = 780
  21. Token lu = 2728
  22. Token lu = 2167
  23. Token lu = 2412
  24. Token lu = 2992
  25. Token lu = 2251
  26. Token lu = 2508
  27. Token lu = 2835
  28. Token lu = 2702
  29. Token lu = 2714
  30. Token lu = 2651
  31. Token lu = 2976
  32. Token lu = 2966
  33. Token lu = 2096
  34. Token lu = 2222
  35. Token lu = 2136
  36. Token lu = 2413
  37. java.lang.NullPointerException
  38. at java.util.StringTokenizer.<init>(StringTokenizer.java:122)
  39. at java.util.StringTokenizer.<init>(StringTokenizer.java:138)
  40. at algo.lirefichiertri(algo.java:185)
  41. at algo.main(algo.java:222)

 
 
pourquoi ça ne fonctionne pas correctement


Message édité par okeefe le 15-05-2003 à 04:16:07
mood
Publicité
Posté le 15-05-2003 à 04:09:52  profilanswer
 

n°394569
Cherrytree
cn=?
Posté le 15-05-2003 à 05:54:46  profilanswer
 

Ton tableau tab, tu l'initialises comment ?


---------------
Le site de ma maman
n°394570
Cherrytree
cn=?
Posté le 15-05-2003 à 05:55:52  profilanswer
 

De plus dans ton cas, y a vraiment, vraiment pas besoin d'un StringTokenizer. Un trim() suffit.


---------------
Le site de ma maman
n°394572
okeefe
Posté le 15-05-2003 à 06:06:45  profilanswer
 

Cherrytree a écrit :

Ton tableau tab, tu l'initialises comment ?


 
private static int[] tab;
ensuite dans le constructeur...
 
tab = new int[11000];
 
et je ferais comment pour utilsier trim? de toute façon ça devrait pas régler mon problème...

n°394574
Cherrytree
cn=?
Posté le 15-05-2003 à 06:18:23  profilanswer
 

okeefe a écrit :


 
private static int[] tab;
ensuite dans le constructeur...
 
tab = new int[11000];
 
et je ferais comment pour utilsier trim? de toute façon ça devrait pas régler mon problème...


Un StringTokenizer c'est pour séparer une chaîne de caractères en tokens. Tu as choisi ' ' (espace) comme token, ce qui signifie que tu décomposes tes chaînes en mots, au sens commun du mot mot.
 
A partir de là, vu que ta chaîne est une ligne, donc un seul mot, ça n'a pas d'intérêt pour toi d'utiliser StringTokenizer. Tu fais juste :
 

Code :
  1. String line;
  2. int i = 0;
  3. while ((line = in.readLine()) != null) {
  4.     tab[i] = Integer.parseInt(line.trim());
  5.     ++i;
  6. }


Message édité par Cherrytree le 15-05-2003 à 06:19:54

---------------
Le site de ma maman
n°394576
okeefe
Posté le 15-05-2003 à 06:37:45  profilanswer
 

merci ça fonctionne sans problème...
 
j'utilisait en fait un string tokeniser car j'ai une autre méthode semblable sauf qu'elle doit lire deux items par ligne...
 
le fichier à la structure:
 

Code :
  1. 588 val0588
  2. 2379 val2379
  3. 2498 val2498
  4. 2692 val2692
  5. 2281 val2281
  6. 897 val0897
  7. 787 val0787
  8. 211 val0211

 
 
mon code ressemble à l'ancien de l'autre:
 
 

Code :
  1. public void lirefichierrech(){
  2.     String NomFichier = "labo1test2.txt";
  3.     try{
  4.       BufferedReader in  = new BufferedReader(new FileReader(NomFichier));
  5.       String str = "test";
  6.       int i=0;
  7.       while (str != null) {
  8.         str = in.readLine();
  9.         StringTokenizer st = new StringTokenizer(str," " );
  10.         while(st.hasMoreTokens()){
  11.           tab[i] = Integer.parseInt(st.nextToken());
  12.           tabrech[i] = st.nextToken();
  13.          // System.out.println("Token lu = " + i);
  14.         }
  15.         i++;
  16.       }
  17.       in.close();
  18.     }
  19.     catch(Exception e){
  20.       e.printStackTrace();
  21.     }
  22.   }

 
 
je déclare les deux tableaux comme l'ancien...
 
j'obtient dans le même genre d'erreur que l'ancien
 

Code :
  1. java.lang.NullPointerException
  2. at java.util.StringTokenizer.<init>(StringTokenizer.java:122)
  3. at java.util.StringTokenizer.<init>(StringTokenizer.java:138)
  4. at algo.lirefichierrech(algo.java:214)
  5. at algo.main(algo.java:235)

 
 
je comprend pas pourquoi ça fonctionne pas

n°394593
darklord
You're welcome
Posté le 15-05-2003 à 08:16:41  profilanswer
 

bin tu as une erreur de design, tout simplement.
 
Tu testes si str n'est pas null, str n'est pas null ok tu rentres dans taboucle
 
et puis tu changes la valeur de str en faisant un readline !!! ca par contre ca peut renvoyer null et donc ton strinktokenizer se viande  
 
est ce clair?


---------------
Just because you feel good does not make you right
n°395529
okeefe
Posté le 15-05-2003 à 16:41:11  profilanswer
 

DarkLord a écrit :

bin tu as une erreur de design, tout simplement.
 
Tu testes si str n'est pas null, str n'est pas null ok tu rentres dans taboucle
 
et puis tu changes la valeur de str en faisant un readline !!! ca par contre ca peut renvoyer null et donc ton strinktokenizer se viande  
 
est ce clair?


 
ça je l'avais compris, c'est plutôt la manière de corriger ça que sais pas comment je vais faire

n°395538
benou
Posté le 15-05-2003 à 16:44:38  profilanswer
 

tin t'abuse ... c'est pas compliqué là !  
 
 

Code :
  1. public void lirefichierrech(){
  2.         String NomFichier = "labo1test2.txt";
  3.         try{
  4.             BufferedReader in  = new BufferedReader(new FileReader(NomFichier));
  5.             String str = in.readLine();
  6.             int i=0;
  7.             while (str != null) {
  8.                 StringTokenizer st = new StringTokenizer(str," " );
  9.                 while(st.hasMoreTokens()){
  10.                     tab[i] = Integer.parseInt(st.nextToken());
  11.                     tabrech[i] = st.nextToken();
  12.                    // System.out.println("Token lu = " + i);  
  13.                 }
  14.                 i++;         
  15.                 str = in.readLine();
  16.             }
  17.             in.close();
  18.         }
  19.         catch(Exception e){
  20.             e.printStackTrace();
  21.         }
  22.     }


---------------
ma vie, mon oeuvre - HomePlayer
n°395543
darklord
You're welcome
Posté le 15-05-2003 à 16:46:22  profilanswer
 

cela dit tu me fais peur avec ton tab là ... Tu connais le nombre de token à l'avance? Si non soit tu alloues un tableau trop grand, soi tu te mange des arrayindexoutofboundexception ...


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 15-05-2003 à 16:46:22  profilanswer
 

n°396214
okeefe
Posté le 15-05-2003 à 23:41:40  profilanswer
 

puisque je sais pas combien de valeur que je lis, j'utilise un tableau dynamique

Code :
  1. private int[] tab=null;
  2.   public algo(){
  3.     tab = new int[]{};
  4.   }


 
je lis ensuite avec cette méthode
 
 

Code :
  1. public void lirefichiertri(){
  2.     String NomFichier = "rech1.txt";
  3.     try{
  4.       BufferedReader in  = new BufferedReader(new FileReader(NomFichier));
  5.       String line;
  6.         int i = 0;
  7.         while ((line = in.readLine()) != null) {
  8.               tab[i] = Integer.parseInt(line.trim());
  9.               //System.out.println("Token lu = " + tab[i]);
  10.         ++i;
  11.         }
  12.       in.close();
  13.     }
  14.     catch(Exception e){
  15.       e.printStackTrace();
  16.     }
  17.   }

 
 
j'obtiens l'erreur
 
java.lang.ArrayIndexOutOfBoundsException
 
en fait aussi que j'arrive à
tab[i] = Integer.parseInt(line.trim());  
ça saute au catch
 
pourtant si je met le tableau statique au lieu de dynamique j'obtien pas d'erreur


Message édité par okeefe le 15-05-2003 à 23:54:13
n°396302
benou
Posté le 16-05-2003 à 01:30:53  profilanswer
 

okeefe a écrit :

puisque je sais pas combien de valeur que je lis, j'utilise un tableau dynamique

Code :
  1. private int[] tab=null;
  2.   public algo(){
  3.     tab = new int[]{};
  4.   }



:lol: [:rofl]  
 
 [:netbios]  excellente celle là !!!
 
bon, troll => [:nero27]


---------------
ma vie, mon oeuvre - HomePlayer
n°396330
Cherrytree
cn=?
Posté le 16-05-2003 à 05:53:02  profilanswer
 

[:rofl]  [:rofl]  [:rofl]


---------------
Le site de ma maman
n°396331
okeefe
Posté le 16-05-2003 à 05:58:56  profilanswer
 

ben quoi on peut peu poser de question? :p

n°396334
Cherrytree
cn=?
Posté le 16-05-2003 à 06:58:11  profilanswer
 

okeefe a écrit :

ben quoi on peut peu poser de question? :p


C'est pas une raison pour bégayer et sortir des bétises. Les tableaux dynamiques c'est un peu plus compliqué que ça. ça se fait avec diverses classes comme ArrayList ou Vector. Ce que tu fais, c'est créer un tableau vide, sans allocation mémoire pour la moindre valeur. C'est normal que ton algo se plante. Il faudrait aussi comprendre ce qui a pu te faire penser que les tableaux dynamiques se créaient comme tu l'as fait.


---------------
Le site de ma maman
n°396347
darklord
You're welcome
Posté le 16-05-2003 à 08:08:57  profilanswer
 

:sweat:


---------------
Just because you feel good does not make you right
n°397507
okeefe
Posté le 16-05-2003 à 20:32:03  profilanswer
 

Cherrytree a écrit :


C'est pas une raison pour bégayer et sortir des bétises. Les tableaux dynamiques c'est un peu plus compliqué que ça. ça se fait avec diverses classes comme ArrayList ou Vector. Ce que tu fais, c'est créer un tableau vide, sans allocation mémoire pour la moindre valeur. C'est normal que ton algo se plante. Il faudrait aussi comprendre ce qui a pu te faire penser que les tableaux dynamiques se créaient comme tu l'as fait.


 
c'est pas des sotises, c'est des gens sur developpez.com qui m'ont dire de faire ça...
 
http://www.developpez.net/forums/viewtopic.php?t=81926

n°397516
the real m​oins moins
Posté le 16-05-2003 à 20:38:46  profilanswer
 

[:rofl]
 
avant qu'un imbécile lache cette énormité, d'autres t'ont quand meme donné la réponse hein  :sarcastic:


Message édité par the real moins moins le 16-05-2003 à 20:39:53

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°397525
okeefe
Posté le 16-05-2003 à 20:58:36  profilanswer
 

the real moins moins a écrit :

[:rofl]
 
avant qu'un imbécile lache cette énormité, d'autres t'ont quand meme donné la réponse hein  :sarcastic:  


 
utiliser un vector, arraylist c'est quand même beaucoup moins performant qu'un tableau

n°397527
the real m​oins moins
Posté le 16-05-2003 à 20:59:19  profilanswer
 

okeefe a écrit :


 
utiliser un vector, arraylist c'est quand même beaucoup moins performant qu'un tableau

non.
 
edit: et puis si tu preferes un truc qui compile pas c'est ton problème [:gratgrat]


Message édité par the real moins moins le 16-05-2003 à 20:59:47

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°397529
Cherrytree
cn=?
Posté le 16-05-2003 à 21:03:12  profilanswer
 

okeefe a écrit :


 
utiliser un vector, arraylist c'est quand même beaucoup moins performant qu'un tableau


Pas tellement. Si tu savais comment est codé une ArrayList, tu te rendrais compte de ton erreur. D'autant que tu peux initialiser une ArrayList en spécifiant sa taille de départ.


---------------
Le site de ma maman
n°397699
the real m​oins moins
Posté le 16-05-2003 à 23:35:39  profilanswer
 

fykman a écrit :

Essayes ca :
 

:sleep:  
on lui a deja fait faire tout ça. il sait pas initialiser un tableau [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°397700
fykman
Errare Humanum Est
Posté le 16-05-2003 à 23:39:07  profilanswer
 

the real moins moins a écrit :

:sleep:  
on lui a deja fait faire tout ça. il sait pas initialiser un tableau [:spamafote]


 
Ouais j'ai vu apres, alors j'ai deleté.... :whistle:

n°397875
benou
Posté le 17-05-2003 à 14:04:05  profilanswer
 

okeefe a écrit :


 
utiliser un vector, arraylist c'est quand même beaucoup moins performant qu'un tableau


tu veux un tableau qui s'aggrandit tout seul ... ca s'appelle une ArrayList.


---------------
ma vie, mon oeuvre - HomePlayer
n°397888
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 17-05-2003 à 14:30:31  profilanswer
 

Cherrytree a écrit :


Pas tellement. Si tu savais comment est codé une ArrayList, tu te rendrais compte de ton erreur. D'autant que tu peux initialiser une ArrayList en spécifiant sa taille de départ.


Dans l'absolu, je doute quand même.
OK, si c'est pour des utilisations de base, on voit pas la différence. Mais passer par des objets comme ArrayList (ou sa version synchronisée Vector) peut s'avérer beaucoup moins performante dans des cas d'utilisations très intensives.
J'ai utilisé OptimizeIt y a un peu plus d'un an pour des tests de perfos et franchement, niveau mémoire et CPU (sur des progs vraiment orientés tests hein, pas des applis) les tableaux d'objets natifs l'emportent haut la main. OK, ArrayList et HashMap c'est hyper pratique à coder, surtout dans le cadre de tableaux à taille variable, mais dire que c'est aussi performant dans l'absolu, je suis pas d'accord [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°397890
the real m​oins moins
Posté le 17-05-2003 à 14:32:04  profilanswer
 

oui mais on s'en branle un peu des perfs :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°397905
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 17-05-2003 à 15:02:16  profilanswer
 

the real moins moins a écrit :

oui mais on s'en branle un peu des perfs :o


Ba moi j'répondais à la question sur les perfs [:ddr555]
Sinon, évidemment que dans la vie de tous les jours j'utilise ArrayList et HashMap (enfin, Vector et Hashtable passk'on a pas droit à 1.2 [:joce]), faire des System.arraycopy(), ça va 30 secondes.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°397921
benou
Posté le 17-05-2003 à 15:40:18  profilanswer
 

Taiche a écrit :

mais dire que c'est aussi performant dans l'absolu, je suis pas d'accord [:spamafote]


c'est aussi performant que si il doit recoder lui même un tableau qui s'agrandit. Je crois que c'était ca qu'on voulait tous dire.
 
et comme le disait cherry, si il veut éviter le redimmensionnement, il a qu'à faire un new ArrayList(1000) et on en parle plus.


---------------
ma vie, mon oeuvre - HomePlayer
n°398010
Cherrytree
cn=?
Posté le 17-05-2003 à 17:48:04  profilanswer
 

Benou a parfaitement vu ce que je voulais dire. Le seul problème que je vois avec une classe Collection, c'est qu'il faut utiliser des wrappers pour stocker les types primitifs. Mais pour le reste, c'est idéal.


---------------
Le site de ma maman
n°398037
the real m​oins moins
Posté le 17-05-2003 à 18:12:36  profilanswer
 

types primitifs sucks :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°398235
Cherrytree
cn=?
Posté le 18-05-2003 à 00:49:06  profilanswer
 

the real moins moins a écrit :

types primitifs sucks :o


Codeurs primitifs sucks.


---------------
Le site de ma maman
n°398266
benou
Posté le 18-05-2003 à 01:56:45  profilanswer
 

Cherrytree a écrit :

Le seul problème que je vois avec une classe Collection, c'est qu'il faut utiliser des wrappers pour stocker les types primitifs.


 
dans son cas, il peut stocket les chaines et ensuite faire un deuxième passage pour transformer la collection de chaine en tableau de int


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  string tokenizer

 

Sujets relatifs
difference entre un StringBuffer et une Stringy a-t-il une taille limite pour un .string ou un .ascii?
[PHP] conversion de données (manipulations de string inside)comment passer le caractère & dans une query string?
String de la taille d'un champ d'une tableString et fuites mémoires
Pb cin >> string HELP c urgent...[C] un Count sur une string
URL -> CGI -> Chaine de caractère -> En faire une String ?[DELPHI] String tokenizer
Plus de sujets relatifs à : string tokenizer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR