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;
        }
    }
}
=====================================================================

Répondre à