Stringtokenizer - implémentation de la classe java en php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 914 fois - Téléchargée 29 fois

Contenu du snippet

Idéal pour écrire un parseur, permet de parcourir un texte "token par token".
Je rappelle qu'un "token" est une "unité de texte".

[Exemple]
$tok = new StringTokenizer("salut c'est moi toto !");
while($tok->hasNext()) {
echo "[".$tok->next()."]";
}

affichera: [salut][c'est][moi][toto][][]

Source / Exemple :


class StringTokenizer
{
  /* private */ var $tokens;
  /* private */ var $string;
  /* private */ var $separators = " \t\r\n~{}[]()-|_/\!:;.,?";
  /* private */ var $hasNext;

  /* public */ function StringTokenizer($string = "")
  {
    $this->setString($string);
  }

  /* public */ function setSeparators($new_separators)
  {
    $this->separators = $new_separators;
    $this->setString($this->string);
  }

  /* public */ function getSeparators()
  {
    return $this->separators;
  }

  /* public */ function setString($string)
  {
    // on remplace tous les séparateurs par \0
    // puis on explose selon \0
    $separators = $this->separators;
    for ($i=0; $i<strlen($separators); $string = str_replace($separators[$i++], "\0", $string));
    $this->string = $string;
    $this->tokens = explode("\0", $string);
    $this->reset();
  }

  /* public */ function getString()
  {
    return $this->string;
  }

  /* public */ function reset()
  {
    reset($this->tokens);
    $this->hasNext = sizeof($this->tokens)>0;
  }

  /* public */ function hasNext()
  {
    return $this->hasNext;
  }

  /* public */ function next()
  {
    $cur = current($this->tokens);
    $this->hasNext = (FALSE!==next($this->tokens));
    return $cur;
  }

}

Conclusion :


Une documentation au format HTML verra bientot le jour (aidé par AutoPhpDoc).

A voir également

Ajouter un commentaire Commentaires
naholyr Messages postés 28 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 11 septembre 2006
22 avril 2003 à 12:07
l'opérateur d'égalité triple fait une comparaison typée. c'est-a-dire que: '0'==0 vaudra TRUE là où '0'===0 vaudra FALSE (car il ne s'agit pas du meme type).
X === Y est equivalent a (X==Y) && (gettype(X)==gettype(Y))
du coup:
X !== Y est equivalent a (X!=Y) || (gettype(X)!=gettype(Y))

c'est plus clair ?
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
22 avril 2003 à 09:34
ch'tite question....
tu ecris "!==" dans ta function next....alors je ne comprends pas la difference entre "!==" et "!=" ...???
si tu pouvais me donner un petit exemple....
merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.