begin process at 2010 03 22 16:53:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > STRINGBUILDER / STRINGBUFFER EN PHP (CLASSE SPÉCIALEMENT CONÇUE POUR MANIPULER DES CHAÎNES DE CARACTÈRES...)

STRINGBUILDER / STRINGBUFFER EN PHP (CLASSE SPÉCIALEMENT CONÇUE POUR MANIPULER DES CHAÎNES DE CARACTÈRES...)


 Information sur la source

Note :
8,25 / 10 - par 4 personnes
8,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :concaténer, string, stringbuilder, optimisation, rapide Niveau :Débutant Date de création :10/08/2007 Date de mise à jour :10/08/2007 01:34:03 Vu :4 085

Auteur : Donald_Duck

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

A l'instar de StringBuilder et de StringBuffer en Java il peut être intéressant d'avoir une classe dédié a la manipulation des strings en PHP.
Le premier but de cette classe est d'optimisé la création d'un string en cas de concaténation avec plusieurs autre, ensuite les autres méthodes sont présentes afin de pouvoir faire un peu tout ce que l'on veut avec cette Objet ;)

Source

  • <?php
  • /**
  • * StringBuilder.class.php
  • *
  • * Une simple classe qui permet une manipulation étendue des String
  • * Cette classe est basé sur la classe StringBuider de Java.
  • * StringBuilder a été codé pour PHP5, elle ne fonctionnera en aucun cas des versions inférieur à celle-ci.
  • *
  • * Cette classe n'est pas destiné à être hérité
  • *
  • * Created on 9 August. 07
  • *
  • * @author Donald_Duck
  • * @version 1.0
  • *
  • * @todo Liste des méthodes a effectuées: ->ensureCapacity
  • * ->getChars
  • * ->offsetByCodePoints
  • */
  • class StringBuilder {
  • /**
  • * @desc Tableau contenant les strings
  • */
  • private $buffer;
  • /**
  • * @desc Constructeur de la classe
  • * @param String $string String a concaténer
  • * @return void
  • * @since 1.0 - 9 août 07
  • * @access public
  • */
  • public function __construct($str="") {
  • $this->buffer = str_split($str);
  • }
  • /**
  • * @desc Concatène le String passer en paramètre avec celui en mémoire
  • * @param String $str Le string a concaténer
  • * @return void
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function append($str) {
  • $this->buffer = array_merge_recursive($this->buffer, str_split($str));
  • }
  • /**
  • * @desc Retourne la capacité courante
  • * @return int La capacity pour l'objet StringBuilder
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function capacity() {
  • if (is_array($this->buffer) && !empty($this->buffer)) {
  • return count($this->buffer);
  • }
  • return null;
  • }
  • /**
  • * @desc Retourne le caractère spécifié pour l'index demandé
  • * @param int $index La position du caractère a retourné
  • * @return Char Le caractère demandé
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • * @deprecated 1.0 - 9 août 07 Utilisé plutôt @see codePointAt()
  • */
  • public final function charAt($index) {
  • try {
  • return $this->buffer[$index];
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • }
  • /**
  • * @desc Retourne le point de code unicode pour l'index spécifié
  • * @param int $index L'index du caractère dans le String
  • * @return int Le point de code unicode
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • * @deprecated 1.0 - 9 août 07 (PHP ne gère pas encore les points unicode)
  • */
  • public final function codePointAt ($index) {
  • //TODO
  • }
  • /**
  • * @desc Retourne le point de code unicode après l'index spécifié
  • * @param int $index L'index du caractère dans le String
  • * @return int Le point de code unicode
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • * @deprecated 1.0 - 9 août 07 (PHP ne gère pas encore les points unicode)
  • */
  • public final function codePointBefore ($index) {
  • //TODO
  • }
  • /**
  • * @desc Retourne le nombre de points de code unicode entre les index spécifiés
  • * @param int $beginIndex L'index de départ du caractère dans le String
  • * @param int $endIndex L'index de fin du caracère dans le String
  • * @return int Le point de code unicode
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • * @deprecated 1.0 - 9 août 07 (PHP ne gère pas encore les points unicode)
  • */
  • public final function codePointCount ($beginIndex, $endIndex) {
  • //TODO
  • }
  • /**
  • * @desc Supprime le caractère entre les deux index pour le String en mémoire
  • * @param int $start L'index de début
  • * @param int $end L'index de fin
  • * @return StringBuilder L'objet StringBuilder
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function delete($start, $end) {
  • try {
  • for ($start; $start < $end; $start++) {
  • unset($this->buffer[$start]);
  • }
  • $this->buffer = array_values($this->buffer);
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • return $this;
  • }
  • /**
  • * @desc Supprime le caractère pour une position spécifié dans la séquence
  • * @param int $index La position du caractèren à supprimé
  • * @return StringBuilder L'Objet StringBuilder
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function deleteCharAt($index) {
  • try {
  • unset($this->buffer[$index]);
  • $this->buffer = array_values($this->buffer);
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • return $this;
  • }
  • /**
  • * @desc Retourne l'index de la première occurrence de la sous-chaîne spécifiée.
  • * @param String $str Le string ou le char rechercher
  • * @param int $offset L'index ou commencer la recherche
  • * @return int $fromIndex L'index de la première occurence trouvé
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function indexOf($str, $fromIndex=0) {
  • $string = implode('', $this->buffer);
  • return strpos($string, $str, $fromIndex);
  • }
  • /**
  • * @desc Insere un String dans la sequence de caractère en cours
  • * @param int $offset La position a laquelle on veut insérer le String
  • * @param String $str Le string a insérer
  • * @return StringBuilder Le StringBuilder
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function insert($offset, $str){
  • $string = implode('', $this->buffer);
  • try {
  • $leftPart= substr($string, 0, $offset);
  • $rightPart = substr($string, $offset, strlen($string));
  • $string = $leftPart.$str.$rightPart;
  • $this->buffer = str_split($string);
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • return $this;
  • }
  • /**
  • * @desc Retourne l'index du dernier caractère trouvé pour la chaine (ou le caractère) recherchée
  • * @param String $str La chaine recherchée
  • * @param int $fromIndex L'index ou commencer la recherche
  • * @return int L'index a l'extreme droite de la chaine recherchée
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function lastIndexOf($str, $fromIndex) {
  • $string = implode('', $this->buffer);
  • $pos = strpos($string, $str, $fromIndex);
  • if ($pos !== false) {
  • return $pos + strlen($str);
  • }
  • return false;
  • }
  • /**
  • * @desc Retourne la longueur du string en mémoire
  • * @return int La longueur du string en mémoire
  • * @since 1.0 - 5 août 07
  • * @access public
  • * @final
  • */
  • public final function length() {
  • return strlen(implode('', $this->buffer));
  • }
  • /**
  • * @desc Remplace la chaine de caractère situé dans l'encadrement par celle passée en argument
  • * @param int $start L'index du début
  • * @param int $end L'index de fin
  • * @param String $str La chaine de caractère pour le remplacement
  • * @return StringBuilder Le StringBuilder
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function replace($start, $end, $str) {
  • $string = implode('', $this->buffer);
  • try {
  • $this->buffer = array_splice($this->buffer, $start, $end-$start, str_split($str));
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • return $this;
  • }
  • /**
  • * @desc Inverse l'ordre de sequence de la chaine de caractère en mémoire
  • * @return StringBuilder Le StringBuilder inversé
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function reverse() {
  • $this->buffer = array_reverse($this->buffer);
  • }
  • /**
  • * @desc Remplace le caractère spécifié pour l'index par celui passé en argument
  • * @param int $index L'index pour le caractère du String en mémoire
  • * @param Char $ch Le caractère a remplacer
  • * @return void
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function setCharAt($index, $ch) {
  • try {
  • $this->buffer[$index] = $ch;
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • }
  • /**
  • * @desc Modifie la taille (en char) de la chaine de caractère en mémoire
  • * Si la taille indiquée est supérieur a celle en mémoire alors la taille en mémoire sera conservée
  • * @param int $newLength La nouvelle taille à affecter
  • * @return void
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function setLength($newLength) {
  • $length = strlen(implode('', $this->buffer));
  • if ($newLength < $length) {
  • $string = substr(implode('', $this->buffer), 0, $newLength);
  • }
  • }
  • /**
  • * @desc Retourne la séquence de caractère entre l'intervalle et construit un nouveau String builder avec
  • * @param int $start L'index du début
  • * @param int $end L'index de fin
  • * @return StringBuilder Le StringBuilder avec la chaine de caractère demandé en paramètre constructeur
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function subSequence($start, $end) {
  • try {
  • return new StringBuilder(implode('', array_slice($this->buffer, $start, $end-$start)));
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • }
  • /**
  • * @desc Retourne un String contenant la sequence entre les intervalle
  • * @param int $start L'index du début
  • * @param int $end L'index de fin
  • * @return String Le String demandé
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function substring($start, $end=null) {
  • if ($end === null) {
  • $end = strlen(implode('', $this->buffer));
  • }
  • try {
  • return implode('', array_slice($this->buffer, $start, $end-$start));
  • } catch (Exception $e) {
  • echo 'Warning: ' , $e->getMessage(),
  • 'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
  • 'Fichier: ' . $e->getFile(),
  • 'Ligne: ' . $e->getLine();
  • }
  • }
  • /**
  • * @desc Convertit le tableau de String en un unique String
  • * @return String le String en mémoire
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function toString() {
  • if (!empty($this->buffer)) {
  • return implode('', $this->buffer);
  • } else {
  • return null;
  • }
  • }
  • /**
  • * @desc Retourne la position courante du pointeur
  • * @return int La position du pointeur
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function getCurrentPos(){
  • return key($this->buffer);
  • }
  • /**
  • * @desc Retourne le caractère correspondant a la position courante du pointer
  • * @return Char Le caractère pointé
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function getCurrentChar() {
  • return current($this->buffer);
  • }
  • /**
  • * @desc Retourne le caractère précédant le caractère pointé par le pointeur
  • * @return Char Le caractère suivant
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function getNextChar() {
  • return next($this->buffer);
  • }
  • /**
  • * @desc Retourne le caractère succédant le caractère pointé par le pointeur
  • * @return Char Le caractère suivant
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function getPrevChar() {
  • return prev($this->buffer);
  • }
  • /**
  • * @desc Retourne le dernier caractère de la chaine de caractère en méméoire
  • * @return Char Le dernier caractère
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function getEndChar() {
  • return end($this->buffer);
  • }
  • /**
  • * @desc Retourne le premier caractère de la chaine de caractère en méméoire
  • * @return Char Le premier caractère
  • * @since 1.0 - 9 août 07
  • * @access public
  • * @final
  • */
  • public final function getFirstChar() {
  • reset($this->buffer);
  • return current($this->buffer);
  • }
  • /**
  • * @desc Reinitialiser leStringBuilder pour lui affecter un nouveau String (= clean with $str)
  • * @param $String $str Le string de remplacement
  • * @return void
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function clean($str){
  • $this->buffer = str_split($str);
  • }
  • /**
  • * @desc Remet le pointer a l'index 0
  • * @return void
  • * @since 1.0 - 10 août 07
  • * @access public
  • * @final
  • */
  • public final function resetPointer(){
  • reset($this->buffer);
  • }
  • }
  • ?>
<?php
/**
 * StringBuilder.class.php
 * 
 * Une simple classe qui permet une manipulation étendue des String
 * Cette classe est basé sur la classe StringBuider de Java.
 * StringBuilder a été codé pour PHP5, elle ne fonctionnera en aucun cas des versions inférieur à celle-ci.
 * 
 * Cette classe n'est pas destiné à être hérité
 * 
 * Created on 9 August. 07
 * 
 * @author Donald_Duck
 * @version 1.0
 * 
 * @todo Liste des méthodes a effectuées: 	->ensureCapacity
 * 						->getChars
 * 						->offsetByCodePoints
 */
class StringBuilder {

	/**
	 * @desc Tableau contenant les strings
	 */
	private $buffer;
	
	/**
	 * @desc Constructeur de la classe
	 * @param String $string String a concaténer
	 * @return void
	 * @since 1.0 - 9 août 07
	 * @access public
	 */
	public function __construct($str="") {
		$this->buffer = str_split($str);
	}
	
	/**
	 * @desc Concatène le String passer en paramètre avec celui en mémoire
	 * @param String $str Le string a concaténer
	 * @return void
	 * @since 1.0 - 9 août 07
	 * @access public 
	 * @final
	 */
	public final function append($str) {
		$this->buffer = array_merge_recursive($this->buffer, str_split($str));
	}
	
	/**
	 * @desc Retourne la capacité courante
	 * @return int La capacity pour l'objet StringBuilder
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function capacity() {
		if (is_array($this->buffer) && !empty($this->buffer)) {
			return count($this->buffer);
		}
		return null;
	}
	
	/**
	 * @desc Retourne le caractère spécifié pour l'index demandé
	 * @param int $index La position du caractère a retourné
	 * @return Char Le caractère demandé
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 * @deprecated 1.0 - 9 août 07 Utilisé plutôt @see codePointAt()
	 */
	public final function charAt($index) {
		try {
			return $this->buffer[$index];
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
	}
	
	/**
	 * @desc Retourne le point de code unicode pour l'index spécifié
	 * @param int $index L'index du caractère dans le String
	 * @return int Le point de code unicode
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 * @deprecated 1.0 - 9 août 07 (PHP ne gère pas encore les points unicode)
	 */
	public final function codePointAt ($index) {
		//TODO
	}
	
	/**
	 * @desc Retourne le point de code unicode après l'index spécifié
	 * @param int $index L'index du caractère dans le String
	 * @return int Le point de code unicode
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 * @deprecated 1.0 - 9 août 07 (PHP ne gère pas encore les points unicode)
	 */
	public final function codePointBefore ($index) {
		//TODO
	}
	
	/**
	 * @desc Retourne le nombre de points de code unicode entre les index spécifiés
	 * @param int $beginIndex L'index de départ du caractère dans le String
	 * @param int $endIndex L'index de fin du caracère dans le String
	 * @return int Le point de code unicode
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 * @deprecated 1.0 - 9 août 07 (PHP ne gère pas encore les points unicode)
	 */
	public final function codePointCount ($beginIndex, $endIndex) {
		//TODO
	}
	
	/**
	 * @desc Supprime le caractère entre les deux index pour le String en mémoire
	 * @param int $start L'index de début
	 * @param int $end L'index de fin
	 * @return StringBuilder L'objet StringBuilder
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function delete($start, $end) {
		try {
			for ($start; $start < $end; $start++) {
				unset($this->buffer[$start]);
			}
			$this->buffer = array_values($this->buffer);
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
		
		return $this;
	}
	
	/**
	 * @desc Supprime le caractère pour une position spécifié dans la séquence
	 * @param int $index La position du caractèren à supprimé
	 * @return StringBuilder L'Objet StringBuilder
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function deleteCharAt($index) {
		try {
			unset($this->buffer[$index]);
			$this->buffer = array_values($this->buffer);
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
	
		return $this;
	}
	
	/**
	 * @desc Retourne l'index de la première occurrence de la sous-chaîne spécifiée.
	 * @param String $str Le string ou le char rechercher
	 * @param int $offset L'index ou commencer la recherche
	 * @return int $fromIndex L'index de la première occurence trouvé
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function indexOf($str, $fromIndex=0) {
		$string = implode('', $this->buffer);
		return strpos($string, $str, $fromIndex);
	}
	
	/**
	 * @desc Insere un String dans la sequence de caractère en cours
	 * @param int $offset La position a laquelle on veut insérer le String
	 * @param String $str Le string a insérer
	 * @return StringBuilder Le StringBuilder
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function insert($offset, $str){
		$string = implode('', $this->buffer);
		
		try {
			$leftPart= substr($string, 0, $offset);
			$rightPart = substr($string, $offset, strlen($string));
			$string = $leftPart.$str.$rightPart;
			$this->buffer = str_split($string);
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
		
		return $this;
	}
	
	/**
	 * @desc Retourne l'index du dernier caractère trouvé pour la chaine (ou le caractère) recherchée
	 * @param String $str La chaine recherchée
	 * @param int $fromIndex L'index ou commencer la recherche
	 * @return int L'index a l'extreme droite de la chaine recherchée
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function lastIndexOf($str, $fromIndex) {
		$string = implode('', $this->buffer);
		$pos = strpos($string, $str, $fromIndex);
		if ($pos !== false) {
			return $pos + strlen($str);
		}
		
		return false;
	}
	
	/**
	 * @desc Retourne la longueur du string en mémoire
	 * @return int La longueur du string en mémoire
	 * @since 1.0 - 5 août 07
	 * @access public
	 * @final
	 */
	public final function length() {
		return strlen(implode('', $this->buffer));
	}
	
	/**
	 * @desc Remplace la chaine de caractère situé dans l'encadrement par celle passée en argument
	 * @param int $start L'index du début
	 * @param int $end L'index de fin
	 * @param String $str La chaine de caractère pour le remplacement
	 * @return StringBuilder Le StringBuilder
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function replace($start, $end, $str) {
		$string = implode('', $this->buffer);
		
		try {
			$this->buffer = array_splice($this->buffer, $start, $end-$start, str_split($str));
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
		
		return $this;
	}
	
	/**
	 * @desc Inverse l'ordre de sequence de la chaine de caractère en mémoire
	 * @return StringBuilder Le StringBuilder inversé
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function reverse() {
		$this->buffer = array_reverse($this->buffer);
	}
	
	/**
	 * @desc Remplace le caractère spécifié pour l'index par celui passé en argument
	 * @param int $index L'index pour le caractère du String en mémoire
	 * @param Char $ch Le caractère a remplacer
	 * @return void
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function setCharAt($index, $ch) {
		try {
			$this->buffer[$index] = $ch;
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
	}
	
	/**
	 * @desc Modifie la taille (en char) de la chaine de caractère en mémoire
	 * Si la taille indiquée est supérieur a celle en mémoire alors la taille en mémoire sera conservée
	 * @param int $newLength La nouvelle taille à affecter
	 * @return void
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function setLength($newLength) {
		$length = strlen(implode('', $this->buffer));
		if ($newLength < $length) {
			$string = substr(implode('', $this->buffer), 0, $newLength);
		}
	}
	
	/**
	 * @desc Retourne la séquence de caractère entre l'intervalle et construit un nouveau String builder avec
	 * @param int $start L'index du début
	 * @param int $end L'index de fin
	 * @return StringBuilder Le StringBuilder avec la chaine de caractère demandé en paramètre constructeur
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function subSequence($start, $end) {
		try {
			 return new StringBuilder(implode('', array_slice($this->buffer, $start, $end-$start)));
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
	}
	
	/**
	 * @desc Retourne un String contenant la sequence entre les intervalle
	 * @param int $start L'index du début
	 * @param int $end L'index de fin
	 * @return String Le String demandé
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function substring($start, $end=null) {
		if ($end === null) {
			$end = strlen(implode('', $this->buffer));
		}
		try {
			return implode('', array_slice($this->buffer, $start, $end-$start));
		} catch (Exception $e) {
			echo 	'Warning: ' , $e->getMessage(), 
					'Code: ' . $e->getCode(), 'Une erreur est survenue dans ',
					'Fichier: ' . $e->getFile(),
					'Ligne: ' . $e->getLine();
		}
	}
	
	/**
	 * @desc Convertit le tableau de String en un unique String
	 * @return String le String en mémoire
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function toString() {
		if (!empty($this->buffer)) {
			return implode('', $this->buffer);
		} else {
			return null;
		}
	}
	
	/**
	 * @desc Retourne la position courante du pointeur
	 * @return int La position du pointeur
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function getCurrentPos(){
		return key($this->buffer);
	}
	
	/**
	 * @desc Retourne le caractère correspondant a la position courante du pointer
	 * @return Char Le caractère pointé
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function getCurrentChar() {
		return current($this->buffer);
	}

	/**
	 * @desc Retourne le caractère précédant le caractère pointé par le pointeur
	 * @return Char Le caractère suivant
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function getNextChar() {
		return next($this->buffer);
	}
	
	/**
	 * @desc Retourne le caractère succédant le caractère pointé par le pointeur
	 * @return Char Le caractère suivant
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function getPrevChar() {
		return prev($this->buffer);
	}
	
	/**
	 * @desc Retourne le dernier caractère de la chaine de caractère en méméoire
	 * @return Char Le dernier caractère
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function getEndChar() {
		return end($this->buffer);
	}
	
	/**
	 * @desc Retourne le premier caractère de la chaine de caractère en méméoire
	 * @return Char Le premier caractère
	 * @since 1.0 - 9 août 07
	 * @access public
	 * @final
	 */
	public final function getFirstChar() {
		reset($this->buffer);
		return current($this->buffer);
	}
	
	/**
	 * @desc Reinitialiser leStringBuilder pour lui affecter un nouveau String (= clean with $str)
	 * @param $String $str Le string de remplacement
	 * @return void
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function clean($str){
		$this->buffer = str_split($str);
	}

	/**
	 * @desc Remet le pointer a l'index 0
	 * @return void
	 * @since 1.0 - 10 août 07
	 * @access public
	 * @final
	 */
	public final function resetPointer(){
		reset($this->buffer);
	}
}
?>

 Conclusion

Utilisation
L'utilisation de cette classe est sensiblement la même (Pour ne pas dire la même) que celle en JAVA

$stringBuilder = new StringBuilder($string_de_depart_pas_obligatoire); //Instancier l'objet
$stringBuilder->append($string_a_concaten er); //Concatener le string en mémoire avec un autre
echo ($stringBuilder->toString()); //Afficher le string définitif

Bon, il est 1H20 et je n'ai plus envie de bosser sur cette classe aujourd'hui (enfin pour ce soir). Certes, il manque encore des methodes (cf TODO dans le code), quelques trucs pas encore tout a fait optimisé, mais néanmoins je pense que l'essentiel est la et suffisant pour la posté afin que chacun puisse y apporter ses remarques et ainsi amélioré cette classe. (Je pense notamment au niveau de la gestion des erreurs)
Si certaine vous pensez que certaine méthodes manque cruellement n'hésitez pas a lyncher pour qu'elles voient le jour ;)
Je pense pas que la source soient difficile a comprendre (J'ai tout fait pour l'évitez :P, néanmoins si y'a des questions, vous connaissez le principe hophophop un petit commentaire :)

PS: J'ai pas eu le temps de tester la source (shame on me!), mais normalement devrait pas y avoir de soucis (Quoi que xD)
Bonne nuit a tous et surtout a toutes ;)


 Historique

10 août 2007 01:34:03 :
Faute de frappe dans le titre :P

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CLASSE D'EXTRACTION DES DONNÉES D'UN FICHIER INI par diglas
GÉNÉRER UNE CHAÎNE ALÉATOIRE SANS BOUCLE NI CRYPTAGE (MD5 OU... par kylekatarnls
Source avec Zip SYSTEME DE CONNEXION IDENTIFIANT + LOGIN par divx78340
FONCTIONS DE BASE POUR GÉNÉRER DU XML EN PHP par wipfire
CRIBLE D'ÉRATOSTHÈNE - LES NOMBRES PREMIERS par Astalavista

Commentaires et avis

Commentaire de kishkaya le 10/08/2007 10:42:57

Je comprends mieux ce que tu voulais faire...

=)

_Marikou

Commentaire de MATHIS49 le 10/08/2007 22:07:30

Sympa on sent la JAVA touch ;)

Commentaire de TheSin le 11/08/2007 11:45:29

Pratique :-)
Par contre, pour éviter de t'embêter avec des mots clés "final" à chaque méthode, déclare simplement la classe en final, puisqu'elle n'est pas destinée à être héritée ;-).

Commentaire de Donald_Duck le 11/08/2007 16:01:06

Huhu je l'attendais cette remarque ;)
Tu as tout à fait raison (et oui :D); J'aurais pu déclarer la classe en final, mais même si la classe n'est pas destiné a être hérité, je me réserve toujours une part de probabilité ou il est nécessaire d'avoir un héritage pour y apporter quelques suppléments par exemple. Bon, c'est ma manière de faire, et elle n'est peut-etre pas forcément louable :) (mais défendable :D)

Commentaire de TheSin le 11/08/2007 16:12:08

bin si jdevais y rapporter des éléments, je le ferait directement dans le code de la classe :-P
A chacun sa vision des choses, mais je trouve ça plus logique de respecter les niveaux de hiérarchie d'objets. :-)

Commentaire de LeFauve42 le 14/08/2007 11:13:00

Salut,

As-tu fait des benchs pour comparer avec une construction de chaines "classique" ?
Autant les stringbuilders sont necessaire en JHava a cause de la maniere dont il gere sa memoire, autant je me demande si ca apporte beaucoup en PHP (a part ne pas depayser les habitues du Java ;o) ).

Sinon le code est vraiment tres clair et tres lisible !
Bravo!

Eric

Commentaire de Donald_Duck le 14/08/2007 19:48:02

En effet, il serait peut-etre utile de faire des benchs.
Sinon il est dommage de ne pas avoir terminé cette classe, en effet je trouve que la façon de codé est très propre et très compréhensible pour un débutant. C'est très pratique pour ceux qui veulent voir comment un peux faire de l'objet en php et la manière de l'utiliser. Cette classe est très simple d'utilisation pour manier les string en php comme tu le dis si bien.

Par contre je pense aussi qu'il aurait mieux fallu déclarer la classe en final (Bien qu'au final cela ne change rien).

I applaud you

Commentaire de Donald_Duck le 14/08/2007 20:10:06

Mort de rire!!
Vous inquiétez pas c'est un collègue qui s'est amusé à squatter ma session. Je voulais lui montrer un truc et voila ce qui arrive si j'ai le malheur de le laisser seul! Quel pourri!!

Mis à part ça, c'est d'accord je vais faire quelques benchs ce soir si j'ai le temps.

@Guillaume: Tu me le payeras! T'aurais au moins pu me démonter la gueule ;)

Commentaire de malalam le 20/08/2007 18:24:17 administrateur CS

Hello,

pas mal :-) Une bonne idée, et c'est agréable à lire.
Les critiques quand même :
- Je suis prêt à parier (pas trop hein) que c'est nettement plus lent que les fonctions str_blabla. Mais si on gagne en simplicité, moi, je ne suis pas contre une petite perte de perf.
- Tu aurais gagné, puisque tu codes en PHP5, à utiliser SPL. Les itérateurs t'auraient grandement aidé et ce serait nettement plus propre. Tu peux te baser sur les classes existantes, ArrayAccess notamment (une chaîne et un tableau...pas si différent, après tout ;-) ).
- Tu devrais pousser plus loin et proposer plus de méthodes inédites, mais d'autres peuvent le faire.
- Dans ton cas, je ne vois pas l'intérêt des try catch DANS tes méthodes. Il eut été plus propre d'étendre la classe Exception pour en créer une spécialisée (voire plusieurs), et de balancer des throw plutôt. Les try devraient être à l'appel de la classe et/ou des méthodes. D'autant plus que la plupart ne servent à rien vu que les fonctions/accès utilisés n'envoient pas d'exceptions (j'ai regardé très vite mais c'est ce qu'il me semble, à vue de nez).

Mais c'est une bonne idée :-)
8/10 pour moi.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Concaténation de String, lequel est le plus "rapide" ? [ par Donald_Duck ] Bonjour à tous,Partant du principe que dans une boucle concaténer des pseudo-String (PHP oblige) avec la bonne vieille methode du "." n'était pas l'id Array to String [ par Aaron ] Hello à tous,J'aimerais savoir s'il est possible d'obtenir un résultat du genre :$req = "INSERT INTO `$table` (`champ1`, `champ2`, `champ3`...) VALUES Probleme PHP sur une "function resize" - la vignette devient noire [ par steuh ] Error convertoring HTML to XHTML: System.ArgumentException: The empty string '' is not a valid name. at System.Xml.XmlTextWriter.ValidateName(Strin punbb et le mod punaspi [ par abdellah1505 ] bonjour,j'essai d'intégrer l'espace membres du punbb sur mon site pour cela je me suis servie du mod punaspi j'ai reussi a restreindre l'accès a une p Bug dans la fonction get_defined_function( ) [ par Calak ] Bonjour Hier, en regardant le résultat d'un get_defined_function() de ma config, je suis tombé sur un truc assez bizard: Est-ce normal, lorsque je fai Explode ou replace string [ par Burnside ] Bonjour,Je recupère de mon calendrier une date au format : 20071119 qui est encodée de cette façon : $PHP_SELF.'event.php?date=%%dd%%';$jour= $_GET['d optimisation d'un code split() [ par Moritus ] Bonjour, Je vouslais mettre dans plusieurs variable un chaine de caratere ce que j'ai réussi a faire avec SPLIT() mais le probleme c'est que je spl $_SERVER['QUERY_STRING'] [ par kelm_by ] salut tous le monde,je ne sais pas pourquoi la valeur de $_SERVER['QUERY_STRING'] est tjr null meme si la page est index.php?id=145merci d'avance Webservice C# et Client PHP [ par yanis7518 ] Salut a tousj'espere avoir poster dans le bon thème sinon je m'en excuseVoila j'ai un webservice écrit un C# avec une webmethode toute simple qui  ret optimisation [ par nemetos ] Pizza Dude


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,997 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales