PHP Classes

File: StringTokenizer.class.php

Recommend this page to a friend!
  Classes of Azeem Michael   String Tokenizer   StringTokenizer.class.php   Download  
File: StringTokenizer.class.php
Role: Class source
Content type: text/plain
Description: breaks string into tokens
Class: String Tokenizer
Split a string in parts separated by characters
Author: By
Last change: Added countTokens() method.
Changed default delimiter from (" ") to " \n\r\t\0"
Date: 12 years ago
Size: 2,604 bytes
 

Contents

Class file image Download
<?php

/**
 * The string tokenizer class allows an application to break a string into tokens.
 *
 * @author Azeem Michael
 * @example The following is one example of the use of the tokenizer. The code:
 * <code>
 * <?php
 * $str = "this is:@\t\n a test!";
 * $delim = " !@:'\t\n\0"; // remove these chars
 * $st = new StringTokenizer($str, $delim);
 * echo 'Total tokens: '.$st->countTokens().'<br/>';
 * while ($st->hasMoreTokens()) {
 * echo $st->nextToken() . '<br/>';
 * }
 * prints the following output:
 * Total tokens: 4
 * this
 * is
 * a
 * test
 * ?>
 * </code>
 */
class StringTokenizer {

   
/** @var string
     */
   
private $string;

   
/** @var string
     */
   
private $token;

   
/** @var string
     */
   
private $delim;

   
/**
     * Constructs a string tokenizer for the specified string.
     * @param string $str String to tokenize
     * @param string $delim The set of delimiters (the characters that separate tokens)
     * specified at creation time, default to " \n\r\t\0"
     */
   
public function __construct($str, $delim=" \n\r\t\0") {
       
$this->string = $str;
       
$this->delim = $delim;
       
$this->token = strtok($str, $delim);
    }

   
/**
     * Destructor to prevent memory leaks
     */
   
public function __destruct() {
        unset(
$this);
    }

   
/**
     * Calculates the number of times that this tokenizer's nextToken method can
     * be called before it generates an exception
     * @return int - number of tokens
     */
   
public function countTokens() {
       
$counter = 0;
        while(
$this->hasMoreTokens()) {
           
$counter++;
           
$this->nextToken();
        }
       
$this->token = strtok($this->string, $this->delim);
        return
$counter;
    }

   
/**
     * Tests if there are more tokens available from this tokenizer's string. It
     * does not move the internal pointer in any way. To move the internal pointer
     * to the next element call nextToken()
     * @return boolean - true if has more tokens, false otherwise
     */
   
public function hasMoreTokens() {
        return (
$this->token !== false);
    }

   
/**
     * Returns the next token from this string tokenizer and advances the internal
     * pointer by one.
     * @return string - next element in the tokenized string
     */
   
public function nextToken() {
       
$hold = $this->token; //hold current pointer value
       
$this->token = strtok($this->delim); //increment pointer
       
return $hold; //return current pointer value
   
}
}
?>