On Wed, 6 Feb 2002, Herve AGNOUX wrote: > Le 4 Feb 2002 Cyriaque Dupoirieux a �crit : > > > > > Il me semble impossible de faire cela simplement avec un > > StringTokenizer, alors j'aimerais s'il faut que je d�veloppe ma propre > > classe ou s'il existe une m�thode pour obtenir ce r�sultat. > > > > Je fais passer un String style style 1;;3;4 dans une moulinette qui > le transforme en 1 ; ;3 ;4, c'est � dire que chaque fois que je vois > un ";" je mets avant un " ". A partir de ce nouveau String je cr�e un > StringTokenizer qui me renverra "1 ", " ", "3 ", "4 ". Puis, � chaque > token, j'applique un trim(). (Je me fiche des espaces, cela tombe > bien !) > > Y a-t-il plus malin ? Oui, peut �tre � partir de la classe > java.io.StreamTokenizer (je viens de me souvenir de l'existence de > cette classe).
En utilisant le flag true dans la cr�ation du StringTokenizer on r�cup�re le d�limiteur � chaque fois. Ca permet donc de r�cup�rer aussi de rep�rer les tokens vides. Sauf erreur le programme ci-apr�s marche pour un d�limiteur r�duit � 1 caract�re UNIQUE. Pour un d�limiteur constitu� de plusieurs caract�res il faut adapter la m�morisation dans l'algo. Pascal NICOLAS Universite d'ANGERS E Mail : [EMAIL PROTECTED] Web Page : http://www.info.univ-angers.fr/pub/pn/ ===================================================================== /* syntaxe d'appel java testToken chaine d�limiteur exemple : java testToken "1;2;;3;4;;;5" ";" */ import java.util.*; public class testToken { public static void main(String arg[]) { String Ch = arg[0]; String D�lim = arg[1]; StringTokenizer StrFalse = new StringTokenizer(Ch,D�lim,false); System.out.println("tous les tokens avec false"); while (StrFalse.hasMoreTokens()) { System.out.println("token ==>"+StrFalse.nextToken()+"<=="); } StringTokenizer StrTrue = new StringTokenizer(Ch,D�lim,true); System.out.println("tous les tokens avec true"); while (StrTrue.hasMoreTokens()) { System.out.println("token ==>"+StrTrue.nextToken()+"<=="); } StringTokenizer QuivaBien = new StringTokenizer(Ch,D�lim,true); System.out.println("tous les tokens m�me les vides"); String M�mo = ""; String Tok = ""; while (QuivaBien.hasMoreTokens()) { Tok = QuivaBien.nextToken(); if (Tok.equals(D�lim)) { // on est sur un d�limiteur if (Tok.equals(M�mo)) {// on a 2 d�lim de suite System.out.println("et un token vide ==><=="); } } else { // on n'est pas sur un d�limiteur System.out.println("et un token de plus ==>"+Tok+"<=="); } M�mo=Tok; } } } =====================================================================
