La classe System.Text.StringBuilder en C sharp


La classe System.Text.StringBuilder en C sharp
La classe System.Text.StringBuilder en C sharp

Précédemment, nous avons dit que les méthodes de la classe String qui s'appliquaient à une chaîne de caractères S1 rendait une
autre chaîne S2. La classe System.Text.StringBuilder permet de manipuler S1 sans avoir à créer une chaîne S2. Cela améliore les
performances en évitant la multiplication de chaînes à durée de vie très limitée.
La classe admet divers constructeurs :
StringBuilder() constructeur par défaut
StringBuilder(String value) construction et initialisation avec value
StringBuilder(String value, int capacité) construction et initialisation avec value avec une taille de
bloc de capacité caractères.

Un objet StringBuilder travaille avec des blocs de capacité caractères pour stocker la chaîne sous-jacente. Par défaut capacité vaut 16. Le
3ième constructeur ci-dessus permet de préciser la capacité des blocs. Le nombre de blocs de capacité caractères nécessaire pour
stocker une chaîne S est ajusté automatiquement par la classe StringBuilder. Il existe des constructeurs pour fixer le nombre maximal
de caractères dans un objet StringBuilder. Par défaut, cette capacité maximale est 2 147 483 647.
Voici un exemple illustrant cette notion de capacité :
1. using System.Text;
2. using System;
3. namespace Chap3 {
4. class Program {
5. static void Main(string[] args) {
6. // str
7. StringBuilder str = new StringBuilder("test");
8. Console.WriteLine("taille={0}, capacité={1}", str.Length, str.Capacity);
9. for (int i = 0; i < 10; i++) {
10. str.Append("test");
11. Console.WriteLine("taille={0}, capacité={1}", str.Length, str.Capacity);
12. }
13. // str2
14. StringBuilder str2 = new StringBuilder("test",10);
15. Console.WriteLine("taille={0}, capacité={1}", str2.Length, str2.Capacity);
16. for (int i = 0; i < 10; i++) {
17. str2.Append("test");
18. Console.WriteLine("taille={0}, capacité={1}", str2.Length, str2.Capacity);
19. }
20. }
21. }
22.}
• ligne 7 : création d'un objet StringBuilder avec une taille de bloc de 16 caractères
• ligne 8 : str.Length est le nombre actuel de caractères de la chaîne str. str.Capacity est le nombre de caractères que peut
stocker la chaîne str actuelle avant réallocation d'un nouveau bloc.
• ligne 10 : str.Append(String S) permet de concaténer la chaîne S de type String à la chaîne str de type StringBuilder.
• ligne 14 : création d'un objet StringBuilder avec une capacité de bloc de 10 caractères
Le résultat de l'exécution :
1. taille=4, capacité=16
2. taille=8, capacité=16
3. taille=12, capacité=16
4. taille=16, capacité=16
5. taille=20, capacité=32
6. taille=24, capacité=32
7. taille=28, capacité=32
8. taille=32, capacité=32
9. taille=36, capacité=64
10.taille=40, capacité=64
11.taille=44, capacité=64
12.taille=4, capacité=10
13.taille=8, capacité=10
14.taille=12, capacité=20
15.taille=16, capacité=20
16.taille=20, capacité=20
17.taille=24, capacité=40
18.taille=28, capacité=40
19.taille=32, capacité=40
20.taille=36, capacité=40
21.taille=40, capacité=40
22.taille=44, capacité=80

Ces résultats montrent que la classe suit un algorithme qui lui est propre pour allouer de nouveaux blocs lorsque sa capacité est
insuffisante :
• lignes 4-5 : augmentation de la capacité de 16 caractères
• lignes 8-9 : augmentation de la capacité de 32 caractères alors que 16 auraient suffi.
Voici quelques-unes des méthodes de la classe :
public StringBuilder Append(string value) ajoute la chaîne value à l'objet StringBuilder. Rend
l'objet StringBuilder. Cette méthode est surchargée
pour admettre différents types pour value : byte,
int, float, double, decimal, ...
public StringBuilder Insert(int index, string
value)
insère value à la position index. Cette méthode est
surchargée comme la précédente pour accepter
différents types pour value.
public StringBuilder Remove(int index, int length) supprime length caractères à partir de la position
index.
public StringBuilder Replace(string oldValue,
string newValue)
remplace dans StringBuilder, la chaîne oldValue par
la chaîne newValue. Il existe une version surchargée
(char oldChar, char newChar).
public String ToString() convertit l'objet StringBuilder en un objet de type
String.
Voici un exemple :
1. using System.Text;
2. using System;
3. namespace Chap3 {
4. class Program {
5. static void Main(string[] args) {
6. // str3
7. StringBuilder str3 = new StringBuilder("test");
8. Console.WriteLine(str3.Append("abCD").Insert(2, "xyZT").Remove(0, 2).Replace("xy", "XY"));
9. }
10. }
11.}
et ses résultats :
XYZTstabCD
Publié par Drupal french Study