StringUtils 0.2 : plus optimisée !
Par -Alexandre LEGOUT aka LAlex- le lundi, novembre 24 2003, 15:45 - AS2 - Lien permanent
J'ai mis en pratique les optimisations qui m'ont été suggérées par Timothee Groleau, et voici donc une version plus optimisée de la classe StringUtils. J'ai également mis en place mon autre implémentation de la méthode reverse, qui se révèle plus performante (MM a bien travaillé sur les tableaux apparemment 8)) ...
Je n'ai finalement pas intégré l'encodage MD5, pour une raison tout bête, qui est que c'est long !
En fait, c'est un surcroit de poids (quelques Ko), pour une utilisation moins fréquente que les fonctionnalités actuelles de la classe. Il me paraît mieux de faire une classe dédiée à l'encodage par exemple. Vous pourrez trouver son implémentation par neo-lao dans le commentaire de ce post.
En passant, neo-lao est un de mes partenaires de Flash Forum et il a ouvert un petit site de ressources, ou il mets à disposition ses réalisations Flash et autres : neo-lao ressources. ![]()
Code de la classe StringUtils/*************************
* StringUtils.as v0.2
* Fonction "utilitaires" de traitement
* des chaînes de caractères
*
*-------------------
* LAlex
* <a href="http://www.lalex.com/">http://www.lalex.com/</a>
*
* ------------------
* Aide à l'optimisation lTrim, rTrim et trim
* Thimothee Groleau
* <a href="http://www.timotheegroleau.com/">http://www.timotheegroleau.com/</a>
*
**************************/
class com.lalex.utils.StringUtils {
// Caractères considérés comme caractères d'espacement
private static var DEFAULT_SPACECHARS:String = "
\t";
// StringUtils.replace
// Cherche une suite de caractères dans une chaine
// pour la remplacer par une autre
// ----------
// $str : Chaine de caractêres à traiter
// $search : Chaine de caractère à chercher
// $replace : Chaine de caractère de remplacement
public static function replace($str:String, $search:String, $replace:String):String {
return $str.split($search).join($replace);
}
private static function spaceStringToObject($space:Object):Object {
var spObj:Object = new Object();
// Si aucun caractères n'est spécifié, utilise
// les caractères par défaut.
if ($space == undefined) {
$space = DEFAULT_SPACECHARS;
}
if (typeof $space == "string") {
// Remplit l'objet
var spLen:Number = $space.length;
while(--spLen >= 0) {
spObj[$space.charAt(spLen)] = true;
}
} else {
spObj = $space;
}
return spObj;
}
// >> private <<
//
// StringUtils._lTrim
// On supprime tous les caractères d'espacement
// au début de la chaine de caractères. Un objet
// dont les propriétés sont les caractères d'espacement
// lui est transmis.
private static function _lTrim($str:String,$space:Object):String {
// Longueur de la chaine restante
var strLen:Number = $str.length;
// Position actuelle
var strPos:Number = 0;
// Tant que la chaine n'est pas vide
while (strLen > 0) {
// Si on ne trouve pas un espace, on arrete la boucle
if (!$space[$str.charAt(strPos)]) {
break;
}
// On avance d'une position
strPos++;
// On raccourcit "virtuellement" la chaine
strLen--;
}
// On retourne la chaine sans les caractères trouvés.
return $str.slice(strPos);
}
// >> private <<
//
// StringUtils._rTrim
// On supprime tous les caractères d'espacement
// à la fin de la chaine de caractères. Un objet
// dont les propriétés sont les caractères d'espacement
// lui est transmis
private static function _rTrim($str:String,$space:Object):String {
// Longueur de la chaine restante
var strLen:Number = $str.length;
// Position actuelle
var strPos:Number = strLen-1;
// Tant que la chaine n'est pas vide
while (strLen > 0) {
// Si on ne trouve pas un espace, on arrete la boucle
if (!$space[$str.charAt(strPos)]) {
break;
}
// On avance d'une position
strPos--;
// On raccourcit "virtuellement" la chaine
strLen--;
}
// On retourne la chaine sans les caractères trouvés.
return $str.slice(0,strPos+1);
}
// StringUtils.lTrim
// On supprime tous les caractères d'espacement
// au début de la chaine de caractères. Une chaine
// dont dont chaque caractère est un caractère d'espacement
// lui est transmise.
public static function lTrim($str:String,$space:String):String {
return _lTrim($str, spaceStringToObject($space));
}
// StringUtils.rTrim
// On supprime tous les caractères d'espacement
// à la fin de la chaine de caractères. Une chaine
// dont dont chaque caractère est un caractère d'espacement
// lui est transmise.
public static function rTrim($str:String,$space:String):String {
return _rTrim($str, spaceStringToObject($space));
}
// StringUtils.trim
// On supprime tous les caractères d'espacement
// au début et à la fin de la chaine de caractères. Une chaine
// dont dont chaque caractère est un caractère d'espacement
// lui est transmise.
public static function trim($str:String, $space:String):String {
var sp:Object = spaceStringToObject($space);
return _rTrim(_lTrim($str, sp), sp);
}
// StringUtils.stringToArray
// Convertit une chaine de caractères en tableau
// contenant un caractère par index.
public static function stringToArray($str:String):Array {
return $str.split("");
}
// StringUtils.arrayToString
// Transforme un tableau en chaine de caractère
// constituée de la concatenation de ses éléments.
public static function arrayToString($ar:Array):String {
return "" + $ar.join("");
}
// StringUtils.reverse
// Inverse l'ordre des caractères d'une chaine
public static function reverse($str:String):String {
// Transforme la chaine en tableau.
var ar:Array = $str.split("");
// Inverse le tableau
ar.reverse();
// Transforme le tableau inversé en chaine.
return ar.join("");
}
}
Commentaires
Je connaissais pas le liens de neo
thx
Ouais, il est un peu caché pour l'instant
Mais il devrait être une rubrique de la prochaine version de mon site.
sinon, pour le md5, c'est vrai que j'y ai pensé aussi, ca prend de la place quand même ...
Moi j'peux le ranger dans plusieurs endroits.
D'ailleurs, chui curieux de savoir comment vous classez vos dossiers de Class vous !
Faudra qu'on fasse un post sur flash forum avec les .flp dedans

bye
neo >> En ce qui me concerne, j'ai un répertoire avec toutes mes classes. Je les range dans un dossier com.lalex. ... L'utilisation des packages sous la forme com... est assez fréquente ! 
D'ailleurs, quand je récupère des classes d'autres personnes, je les modifie pour avoir cette organo. Par exemple, pour le GDispatcher de Grant Skinner, j'ai juste modifié le package pour qu'elle soit com.gskinner.events.GDispatcher ... je préfère cette organo.
Sinon, certains ont le même système pour leurs bibliothèques de classes, mais rangent les classes spécifiques à un projet dans le même répertoire que le fla (ou dans des sous-répertoires) ... c'est juste une question de goût !
neo >> Au fait, quand c'est qu'il sort ton nouveau site ?
Je vais sur la page d'accueil tous les jours pour voir, mais rien ... 
oula, j'me le demande moi même !
j'ai du mal à inventer un nouveau design
J'ai toujours visé la rapidité de chargement, j'ai atteins la limite avec le site actuel, 100Ko environ
Maintenant ... chai pas, j'ai pensé recemment à la rubrique Ressources que j'ai développé, j'pense à un menu extensible déjà, parce que j'ai quelques idées en cogitation. Mais bon, comme je peux pas tout faire à la fois, et que mon site marche, je laisse en suspen pour l'instant. Déjà que j'le force à mettre une new chaque mois histoire d'avoir une image de démarrage lol
J'avais commencé à faire la page d'entrer
http://www.neo-lao.com/neo27/
Elle date un peu ta page
Tu as du me la montrer il y a 2 mois 
Est-il possible de se créer une classe utils comme celle -ci en ne chargeant que les méthodes que l'on n'utilise ? Si on n'utilise qu'une méthode, pourquoi tout charger ?
Merci
Bonjour !!
D'abord merci pour tous ces codes. Je débute en AS, cela m'aide énormément !
Je pense (pas encore 100% sûr..
) que la fonction spaceStringToObject est mal déclarée :
ca ne saurait pas :
spaceStringToObject($space:String):Object {
au lieu de :
spaceStringToObject($space:Object):Object {
??
Voilou. Continuez de faire du bon boulot comme ca. A bientot je l'espère !
Merci pour le script !
Fil des commentaires de ce billet