C-SHARP - 4.9 Stringbuilder (Démo)

On se retrouve maintenant sur Visual Studio afin de mettre en pratique ce qu on vient de voir dans la video precedente. Nous allons nous amuser avec la notion de Stringbuilder, commen ons par creer un objet de type constructeur de chaines soit Stringbuilder. On va taper var, on va l appeler builder ensuite = new StringBuilder() ;. On a dit que la classe StringBuilder etait contenu dans la classe System.Text, c est donc pour ça que c est souligne ici, il faut importe la classe. Donc vous faites clic-droit, vous cliquez ici et la vous importez la classe System.text. Ok, maintenant qu on a notre StringBuilder, explorons maintenant certaines methodes afin de construire des chaines. Vous tapez le nom de la variable soit builder et vous mettez un point pour pointer vers des methodes. Et comme vous pouvez le voir, on a par exemple plusieurs methodes Append Append classique, AppendFormat, AppendJoin et AppendLine(). Jetons un oeil sur la methode Append classique. Comme vous pouvez le voir ici, la methode Append est une methode surchargee. Dans la classe Stringbuilder, il existe d autres methodes Append avec un nombre de param tre et type differents. Il en existe 26 au total, ici on a celle qui prend un booleen mais elle peut prendre un string, un char etc Je vais cliquer sur le Append et Visual Studio va nous rediriger vers la classe StringBuilder qui contient toutes les methodes qu on peut utiliser. Vous voyez ? On peut avoir un string un double un int, un tableau de char etc Donc utilisons par exemple celle qui prend un tableau de caractère. Soit elle prend en paramètre un char et la valeur dont elle doit le repeter. Je voudrais donc que le char * soit repete dix fois. Donc je mets mon caractère etoile virgule ainsi que le nombre de fois que je veux qu il se rep te donc ici je mets 10. Ensuite je fais un Console.WriteLine() de mon builder. Je lance le programme et vous voyez ? On a bien nos dix etoiles qui se sont affiche. On va maintenant creer une ligne vide dans notre builder avec la methode AppendLine() Et après cela, j'aimerais afficher une en-t te Bienvenue donc pour faire a je fais de nouveau un builder.Append() et a l interieur de mes parenthèses j y mets ma chaine Bienvenue. Je vais copier-coller ces lignes pour avoir une belle en t te en fen tre de sortie. Si je lance maintenant le programme. Eh bien vous voyez ? Nous avons cree une belle en t te tr s facilement et rapidement. En realite, les StringBuilder ont aussi pour objectif de creer quelques choses de beau. Il s agit bien ici de manipulation de chaines. Avec les Stringbuilder, et une autre notion qu on verra dans ce cours. On pourra creer des generateurs de mots aleatoire en l inserant dans notre StringBuilder. Maintenant examinons d autres methodes sur notre StringBuilder. Precedemment dans la video, on avait vu qu on pouvait utiliser la methode Replace(). M me principe que pour les String, elle permet de remplacer un caractère, une chaine etc par autre chose. Imaginons maintenant qu au lieu de mettre des etoiles ici, j ai envie de changer par des tirets. Je pourrais tr s bien le changer directement ici, mais j ai envie de vous faire travailler avec la methode Replace avec un petit algorithme. Je vais demander a l utilisateur de choisir s il a envie de changer les etoiles en tirets. Si, oui alors on change sinon on renvoie Non, je laisse comme ça. Donc je vais faire un Console.WriteLine() pour dire a l utilisateur Voulez-vous changer les * en - ? (tapez oui pour remplacer, non pour laisser) Ensuite je vais creer une variable choix qui va contenir ce que l utilisateur va repondre donc j affecte la methode Console.ReadLine(). Puis je fais une condition, si choix est == a oui alors on remplace les etoiles par des tirets. Et a l interieur de mes accolades, je fais builder pointant vers ma methode Replace() le premier param tre c est l element qu on souhaite remplacer donc ici l etoile et le 2 me c est l element avec lequel on veut le remplacer soit des tirets. On n est pas oblige de faire un else mais je vais le faire quand m me et je vais afficher Non je laisse comme a. Et a la fin on affiche le builder avec le Console.WriteLine() Ok maintenant, si je lance. Voulez-vous changer les * en - ? (Tapez oui pour remplacer, non pour laisser) . Je tape non pour tester si tout marche, j entre hop c est bon a fonctionne si on met non, on a bien nos etoiles qui s affiche. Maintenant si je relance et que j entre oui qu est-ce qu il se passe ? Eh bien vous voyez ? On a bien toutes nos etoiles qui ont ete remplaces par des tirets. Ici l utilisateur a taper oui donc la condition du if est vraie, on execute la methode Replace() afin de remplacer ce qu on a mis en premier param tre. Passons a la methode Remove(), cette methode prend en param tre un index et le nombre d element qu elle va supprimer. Par exemple, on veut commencer a l index 0 et on veut supprimer les 10 premiers elements. Avant le Console.WriteLine() je fais un builder pointant vers la methode Remove() entre parenth ses je mets l index zero et le nombre d element que je veux supprimer soit 10. Ok, si je lance le programme voyons ce qui se passe. Donc comme on peut le voir, la ligne du haut a ete compl tement supprimer, si je change je mets 5 et je relance elle m a supprime mes 5 elements. Nous pouvons aussi utiliser la methode Insert pour inserer des choses dans notre chaine. Elle prend en paramètre l index a laquelle nous voulons inserer notre element et le 2 me param tre l element que nous voulons inserer. Ici on a supprime les 5 premiers elements et j ai envie maintenant d inserer des plus. Donc juste apr s cette ligne je fais un builder.Insert() dans les parenth ses l index d o je veux commencer a inserer, ici c est 0 et l element que je souhaite inserer c est des plus. Donc ici je mets un . Si je lance le programme. Vous voyez j ai bien insere mon plus mais je n ai pas eu le resultat que je souhaitais. En realite ici, on lui dit d injecter un seul plus et non 5 pour completer la ligne. C est pour cela qu on a ce resultat. Donc ici, il faut faire quoi, il faut inserer une chaine qui va repeter 5 fois comme on l a fait en haut avec le append. Soit on fait un new string() parenth ses le caract re qu on souhaite ajouter et le nombre de fois soit 5. Maintenant si je lance le programme, eh bien on a le resultat qu on attendait. Pour recapituler, ici on cree notre constructeur de chaine. Ensuite on lui a ajoute avec la methode append des etoiles ainsi que bienvenue et la methode AppendLine() pour ajouter des lignes vides histoire que a soit plus esthetiques. On a fait un petit algorithme pour demander a l utilisateur s il a envie de changer les etoiles en tirets grâce a la methode Replace. Apr s avec la methode Remove() on a supprime a partir du debut de la chaine un nombre d element donne en param tre. Et pour terminer, on a insere des plus a partir du debut de la chaine. Ainsi, vous voyez que le constructeur de cha nes, Stringbuilder facilite la modification des cha nes. En outre, cela est plus rapide que manipuler des strings avec pleins d operations dessus. A chaque operation qu on effectue lorsqu on manipule des strings, on cree un objet String en memoire et le retournent. Si maintenant, nous avons un grand d operations de manipulations de chaines alors le co t en memoire sera couteux. Il est donc preferable d utiliser des constructeurs de chaines afin que nos programmes soit plus efficace et optimise. Notez egalement que lorsqu on cree un StringBuilder, il est tout a fait possible de creer une chaine de depart. Ici dans les parenth ses, nous pouvons ajouter la chaine Bonjour a tous et n emp chera pas le reste des manipulations qu on fait juste apr s. Regardons le resultat. Maintenant il est interessant de voir qu apr s toutes ces manipulations, la premi re partie du Bonjour a tous est supprimee. Des plus y sont a la place. Et nos etoiles ont bien etaient remplacees par des tirets. Donc, il est vraiment plus facile pour manipuler des chaines avec le StringBuilder. Petit rappel, comme on l a vue dans la video precedente. La seule contrainte, c est qu il n est pas possible d effectuer des recherches sur les constructeurs de chaines. Si on tape builder point ici on retrouve toutes les methodes qu on peut utiliser avec les Stringbuilder et malheureusement nous n avons aucune qui permet de rechercher l index d un caract re ou d une chaine. Cependant, il est possible d acceder a des caract res individuels dans le Stringbuilder, en reprenant notre builder et y mettant des crochets. On fait comme pour recuperer un element d un tableau, ici on veut recuperer le premier caract re donc on met 0 entrecrochets ici je vais juste rajouter une chaine 1er char : que je vais concatener et si je lance le programme Vous voyez ? 1er char : equivaut bien a un d ici. Dernière chose avant de terminer, si on regarde un peu plus la signature de nos methodes. Ici il nous est retourner un constructeur de chaines, Stringbuilder et pas une methode vide. Ce qui signifie qu on peut cha ne ces methodes append() et rendre notre code plus propre. En realite a chaque operation, on nous renvoie notre constructeur de chaine mise a jour. Soit on peut directement pointer a chaque fois sur la mise a jour. Pas besoin de rappeler notre variable vu qu elle est automatiquement renvoye. Donc ici, on peut supprimer les points virgule et ces variables builder afin de tous les enchaines ensemble. Et en gros, a chaque fois la methode va s appliquer sur ce que va retourner une methode. Et vous voyez cela rend nettement notre code plus lisible. Et pareil pour celle-ci. Je peux aussi les enchaines ensemble. Soit on a maintenant un code plus agreable et beaucoup plus propre. En tout cas j espère que cette video vous a plus et que tout a ete clair pour vous ! Je vous dis a la prochaine dans une nouvelle video.