[Java] Probleme avec "\n" lors d'un String.split(";")

Probleme avec "\n" lors d'un String.split(";") [Java] - Java - Programmation

Marsh Posté le 29-06-2005 à 13:51:45    

Bonjour,
 
J'ai un probleme avec mon programme qui fait du split(";" ) sur un texte que je copie et colle sur un TextArea.
En fait, mon texte que je colle sur mon TextArea est formaté comme suit

Citation :

num1;ID1;num1a;num1b
num2;ID2;num2a;num2b
....
numX;IDX;numXa;numXb


 
Ce que je fais :

Code :
  1. public void creationMilieu (String s){
  2.   String[] tokens = s.split(";" );
  3.          int t = tokens.length;
  4.   System.out.println(t);
  5.   for (int i=0; i<t; i++){
  6.    System.out.println(tokens[i] +  "   <=== Numero " + i);
  7.   }


 
Ce qu'il me donne :

Code :
  1. 25
  2. 1   <=== Numero 0
  3. hav0c   <=== Numero 1
  4. 3   <=== Numero 2
  5. 30523   //j'ai vu que ca venais du \n
  6. 2   <=== Numero 3
  7. polux   <=== Numero 4
  8. 2   <=== Numero 5
  9. 24789   // Idem
  10. 3   <=== Numero 6
  11. domit   <=== Numero 7
  12. 1   <=== Numero 8
  13. 8408    // Idem
  14. 4   <=== Numero 9
  15. TiGeR_Bl_AcK   <=== Numero 10
  16. 1   <=== Numero 11
  17. 7127    // Idem
  18. 5   <=== Numero 12
  19. andy   <=== Numero 13
  20. 0.5   <=== Numero 14
  21. 4905
  22. 6   <=== Numero 15
  23. just   <=== Numero 16
  24. 0.5   <=== Numero 17
  25. 2825
  26. 7   <=== Numero 18
  27. zioud   <=== Numero 19
  28. 0.5   <=== Numero 20
  29. 1940
  30. 8   <=== Numero 21
  31. serial   <=== Numero 22
  32. 0.5   <=== Numero 23
  33. 1799   <=== Numero 24


 
Résultat j'ai fait un :
       

Code :
  1. s = s.replaceAll("\n", ";" );


avant de spliter ma String....
au final ça donne d'autre chose mais toujours pas ce que je cherche:

Code :
  1. 32
  2. 1   <=== Numero 0
  3. hav0c   <=== Numero 1
  4. 3   <=== Numero 2
  5.    <=== Numero 3  //heuuu où est mon num1c?
  6. 2   <=== Numero 4
  7. polux   <=== Numero 5
  8. 2   <=== Numero 6
  9.    <=== Numero 7  // Idem
  10. 3   <=== Numero 8
  11. domit   <=== Numero 9
  12. 1   <=== Numero 10
  13.    <=== Numero 11  // Idem
  14. 4   <=== Numero 12
  15. TiGeR_Bl_AcK   <=== Numero 13
  16. 1   <=== Numero 14
  17.    <=== Numero 15
  18. 5   <=== Numero 16
  19. andy   <=== Numero 17
  20. 0.5   <=== Numero 18
  21.    <=== Numero 19
  22. 6   <=== Numero 20
  23. just   <=== Numero 21
  24. 0.5   <=== Numero 22
  25.    <=== Numero 23 
  26. 7   <=== Numero 24
  27. zioud   <=== Numero 25
  28. 0.5   <=== Numero 26
  29.    <=== Numero 27
  30. 8   <=== Numero 28
  31. serial   <=== Numero 29
  32. 0.5   <=== Numero 30
  33. 1799   <=== Numero 31


 
quand je refais un autre traitement sur mon tableau pour l'afficher directement alors là je piges pas non plus ça me donne les numXc mais plus les premiers numX....

Code :
  1. hav0c 3 30523
  2. i = 0
  3.   polux 2 24789
  4. i = 4
  5.   domit 1 8408
  6. i = 8
  7.   TiGeR_Bl_AcK 1 7127
  8. i = 12
  9.   andy 0.5 4905
  10. i = 16
  11.   just 0.5 2825
  12. i = 20
  13.   zioud 0.5 1940
  14. i = 24
  15. 8 serial 0.5 1799  // C'est marrant lui ca me le donne mon num8 ...
  16. i = 28


Message édité par karamba38 le 30-06-2005 à 15:43:38
Reply

Marsh Posté le 29-06-2005 à 13:51:45   

Reply

Marsh Posté le 02-07-2005 à 21:13:41    

Un ami a cherché avec moi et a trouvé d'où venais le problème.
Visiblement il n'y avait pas qu'un probleme de "\n" mais aussi un problème de "Line Feed" char c = 10; en gros.
Il fallait aussi que je l'enleve...
 
Par contre je sais toujours pas d'où il vient surtout sur un copier coller basique de texte donné via une requete SQL :)
 
M'enfin voilà une réponse pour ceux qui rencontrerais ce probleme.

Reply

Marsh Posté le 02-07-2005 à 21:15:37    

fait un strip()

Reply

Marsh Posté le 02-07-2005 à 21:19:15    

J'ai essayer d'avoir la doc du strip mais j'ai rien... ça a était implémenté dans la JDK 1.5 ou elle y est aussi cette class dans la 1.4?

Reply

Marsh Posté le 02-07-2005 à 21:24:58    

merde, c'est .trim() en java :)

Reply

Marsh Posté le 02-07-2005 à 21:39:09    

je pige pas... :/
La java doc explique bien ce que ca devrait retourné mais visiblement il ne prends pas en compte le "line Feed" je pense que trim (si j'ai bien compris ce que marqué la java doc) ne change/n'affiche que tes caractères au dessus de 20 en décimal... hors "Line Feed" = 10 et '\n'=13 ..
donc ton trim() n'a pas l'air de marché pour ce que je demande.

Reply

Marsh Posté le 02-07-2005 à 21:39:56    

Code :
  1. [21:39:32](AC 96%)[pts/2][~/Code/Java][#23]
  2. benoit@ibook >>> cat trim_split.java
  3. public class trim_split
  4. {
  5.     public static void split(String s)
  6.     {
  7.         String[] tokens = s.trim().split(";" );
  8.         for (int i = 0; i < tokens.length; i++) {
  9.             System.out.println("#" + i + "\"" + tokens[i] + "\"" );
  10.         }
  11.     }
  12.     public static void main(String[] args)
  13.     {
  14.         split("a;b;c;d;e\n" );
  15.     }
  16. }
  17. [21:39:34](AC 96%)[pts/2][~/Code/Java][#24]
  18. benoit@ibook >>> jikes-kaffe trim_split.java
  19. [21:39:38](AC 96%)[pts/2][~/Code/Java][#25]
  20. benoit@ibook >>> kaffe trim_split
  21. #0"a"
  22. #1"b"
  23. #2"c"
  24. #3"d"
  25. #4"e"

Reply

Marsh Posté le 02-07-2005 à 21:50:57    

je viens de commenté le code où je remplace mon "line feed"
c'est à dire :

Code :
  1. char c=13;
  2.  String s2="";
  3.  s2+=(char)c;
  4.  c=10;
  5.  s2+=(char)c;
  6.  s = s.replaceAll(s2, ";" );
  7.  c=10;
  8.  s2="";
  9.  s2+=(char)c;
  10.  s = s.replaceAll(s2, ";" );


et j'ai mis un  
String[] tokens = s.trim().split(";" );
résultat ca foir quand meme :
 

Citation :

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException:
 19
        at Scores.creationMilieu(Scores.java:91)
        at Scores.actionPerformed(Scores.java:59)
        at java.awt.Button.processActionEvent(Button.java:388)
        at java.awt.Button.processEvent(Button.java:356)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
 
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
 
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)



Message édité par karamba38 le 02-07-2005 à 21:51:41
Reply

Marsh Posté le 02-07-2005 à 21:53:56    

ben c'est ton usage de tokens qui est sans doute pourri.
 
 
comme tes cast de char en char ...

Reply

Marsh Posté le 02-07-2005 à 22:03:14    

je suis d'accord que le code pour virer les line Feed est pas top, mais bon, il m'a permis de virer mes problemes (merci quand meme a mon pote qui avait fait ça :p)  
Sinon l'usage de tokens c'est tout simplement dans une boucle for...
 
Rien de bien sorcier surtout rien qui pourrais me faire avoir des erreurs comme celles ci...

Reply

Marsh Posté le 02-07-2005 à 22:03:14   

Reply

Marsh Posté le 02-07-2005 à 22:06:50    

ben tu vois mon code, ça marche.

Reply

Marsh Posté le 02-07-2005 à 22:15:47    

dans le tiens tu fais pas de copier coller d'un texte dans un TextArea non plus ;) ça peut venir de là non? vu que je fais le traitement apres le collage du texte dans le TextArea et apres clique sur mon bouton Validez....
 
Là toi tu prends juste une String banale bien définie et non variable : "a;b;c;d;e\n"
Je comprends bien qu'il n'y ait pas d'erreur avec ton programme ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed