Stringtokenizer - implémentation de la classe java en php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 526 fois - Téléchargée 27 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

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

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.