Découper efficacement une String (parsage)(String.split,Tokenizer,etc)

Découper efficacement une String (parsage)(String.split,Tokenizer,etc) - Java - Programmation

Marsh Posté le 23-07-2008 à 03:21:52    

Bonjour tout le monde,
J'ai un petit problème d'analyse de chaînes de caractères.
En effet, j'ai un fichier qui contient à partir d'un certain endroit, des lignes contenant :
-N nombres espacés par un nombre inconnu d'espaces/tabulations et que j'aimerai réussir récupérer.
-du texte qui ne m'interesse pas
 
J'ai commencé par utiliser des StreamTokenizer malheuresement, je n'arrivais pas à bien détecter les changements de lignes qui me sont nécéssaires.
 
Ensuite, j'ai utilisé des StringTokenizer en me disant que je pourrait faire pareil qu'avec les StreamT. en lisant les lignes du fichier une par une
( while ((str=lecteurAvecBuffer.readLine())!=null) ou quelque chose comme ça) sauf que le StringTokenize m'a l'air ben moins puissant.
J'ai voulu perséverer sur la lecture ligne par ligne en séparant les nombres du restes avec la méthode split et une regexp qui me semblait judicieuse ( String[] numbers=str.split("[^.0-9]*" ); ) mais j'ai l'impression qu'elle ne prenait pas le plus grand motif matché possible en tant que séparateur.
 
Finalement, je ne sais pas quelle est la bonne marche à suivre...
 
 
Au autre problème que j'ai résolu est celui du parsage d'une ligne contenant des infos entre guillemets par :

Code :
  1. // on ajoute des guillemets pour que la ligne suivante marche
  2. String str="\""+lecteurAvecBuffer.readLine()+"\"";
  3. // ce qui sépare 2 champs est 'guillemet' suivi d'un nombre quelconque de non-'guillemet' suivi d'un 'guillemet'
  4. String[] result1=str.split("\"[^\"]*\"" );
  5. // result1 commencait par une chaine vide en théorie (création artificielle d'un champs)
  6. result2=new String[result1.length-1];
  7. for (int i=0; i<result2.length; i++)
  8.          {
  9.           result2[i]=result1[i+1];
  10.          }


ce qui marche mais ne doit pas du tout être LA façon de faire. Est ce que quelqu'un aurait mieux à proposer?
 
Je suis ouvert à toute remarque constructive.
 
Merci d'avance.

Reply

Marsh Posté le 23-07-2008 à 03:21:52   

Reply

Marsh Posté le 23-07-2008 à 13:56:48    

String[] numbers=str.split("[^.0-9]*" );
C'est pas bon, c'est String[] numbers=str.split("\s" );


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

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