Utilisation de la classe StringBuilder dans .NET

L’objet String est immuable. Chaque fois que vous utilisez l’une des méthodes de la classe System.String, vous créez un nouvel objet string en mémoire, ce qui nécessite une nouvelle allocation d’espace pour ce nouvel objet. Si vous devez effectuer des modifications répétées sur une chaîne, la surcharge associée à la création d’un objet String peut être coûteuse. Vous pouvez utiliser la classe System.Text.StringBuilder quand vous voulez modifier une chaîne sans créer d’objet. Par exemple, la classe StringBuilder permet d’améliorer les performances quand il s’agit de concaténer un grand nombre de chaînes dans une boucle.

Importation de l’espace de noms System.Text

La classe StringBuilder se trouve dans l’espace de noms System.Text. Pour éviter d’avoir à fournir un nom de type complet dans votre code, vous pouvez importer l’espace de noms System.Text :

using namespace System;
using namespace System::Text;
using System;
using System.Text;
Imports System.Text

Instanciation d’un objet StringBuilder

Vous pouvez créer une nouvelle instance de la classe StringBuilder en initialisant votre variable avec l’une des méthodes de constructeur surchargées, comme l’illustre l’exemple suivant.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
Dim myStringBuilder As New StringBuilder("Hello World!")

Définition de la capacité et de la longueur

Bien que StringBuilder soit un objet dynamique qui permet de développer le nombre de caractères contenus dans la chaîne qu’il encapsule, vous pouvez spécifier une valeur pour le nombre maximal de caractères qu’elle peut contenir. Cette valeur est appelée « capacité » de l’objet et ne doit pas être confondue avec la longueur de la chaîne que l’instance actuelle de StringBuilder contient. Par exemple, vous pouvez créer une nouvelle instance de la classe StringBuilder avec la chaîne « Hello », dont la longueur est de 5, et préciser que l’objet a une capacité maximale de 25. Quand vous modifiez l’instance de StringBuilder, elle ne se réalloue pas une taille tant que la capacité maximale n’est pas atteinte. Quand cela se produit, le nouvel espace est alloué automatiquement et la capacité est doublée. Vous pouvez spécifier la capacité de la classe StringBuilder en utilisant l’un des constructeurs surchargés. L’exemple suivant spécifie que l’objet myStringBuilder peut être développé en 25 espaces, au maximum.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!", 25);
StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
Dim myStringBuilder As New StringBuilder("Hello World!", 25)

De plus, vous pouvez utiliser la propriété Capacity en lecture/écriture pour définir la longueur maximale de votre objet. L’exemple suivant utilise la propriété Capacity pour définir la longueur maximale de l’objet.

myStringBuilder->Capacity = 25;
myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25

La méthode EnsureCapacity peut être utilisée pour vérifier la capacité de l’instance actuelle de StringBuilder. Si la capacité est supérieure à la valeur passée, aucune modification n’est apportée ; en revanche, si la capacité est inférieure à la valeur passée, la capacité actuelle est modifiée pour correspondre à la valeur passée.

Vous pouvez aussi afficher ou définir la propriété Length. Si vous attribuez à la propriété Length une valeur supérieure à celle de la propriété Capacity, la propriété Capacity prend automatiquement la valeur de la propriété Length. Si vous attribuez à la propriété Length une valeur inférieure à la longueur de la chaîne dans l’instance actuelle de StringBuilder, la chaîne se raccourcit.

Modification de la chaîne StringBuilder

Le tableau suivant répertorie les méthodes que vous pouvez utiliser pour modifier le contenu d’une instance de StringBuilder.

Nom de la méthode Utilisation
StringBuilder.Append Ajoute des informations à la fin de l’instance actuelle de StringBuilder.
StringBuilder.AppendFormat Remplace un spécificateur de format passé dans une chaîne avec du texte mis en forme.
StringBuilder.Insert Insère une chaîne ou un objet dans l’index spécifié de l’instance actuelle de StringBuilder.
StringBuilder.Remove Supprime un nombre de caractères spécifié de l’instance actuelle de StringBuilder.
StringBuilder.Replace Remplace toutes les occurrences d'une chaîne ou d'un caractère spécifié dans le StringBuilder actuel par une autre chaîne ou un autre caractère spécifié.

Ajouter (Append)

La méthode Append permet d’ajouter du texte ou une représentation sous forme de chaîne d’un objet à la fin d’une chaîne représentée par l’instance actuelle de StringBuilder. L’exemple suivant initialise une instance de StringBuilder à « Hello World » avant d’ajouter du texte à la fin de l’objet. L’espace est alloué automatiquement en fonction des besoins.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Append(" What a beautiful day.");
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Append(" What a beautiful day.")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World! What a beautiful day.

AppendFormat

La méthode StringBuilder.AppendFormat ajoute du texte à la fin de l’objet StringBuilder. Elle prend en charge la fonctionnalité de mise en forme composite (pour plus d’informations, consultez Mise en forme composite) en appelant l’implémentation IFormattable des objets à mettre en forme. Par conséquent, elle accepte les chaînes de format standard pour les valeurs numériques, de date et d’heure et d’énumération, les chaînes de format personnalisé pour les valeurs numériques et de date et d’heure, ainsi que les chaînes de format définies pour des types personnalisés. (Pour plus d’informations sur la mise en forme, consultez Types de mise en forme.) Vous pouvez utiliser cette méthode pour personnaliser le format des variables et ajouter ces valeurs à un StringBuilder. L’exemple suivant utilise la méthode AppendFormat pour placer une valeur entière mise en forme en tant que valeur monétaire à la fin d’un objet StringBuilder.

int MyInt = 25;
StringBuilder^ myStringBuilder = gcnew StringBuilder("Your total is ");
myStringBuilder->AppendFormat("{0:C} ", MyInt);
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Your total is $25.00
int MyInt = 25;
StringBuilder myStringBuilder = new StringBuilder("Your total is ");
myStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Your total is $25.00
Dim MyInt As Integer = 25
Dim myStringBuilder As New StringBuilder("Your total is ")
myStringBuilder.AppendFormat("{0:C} ", MyInt)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'     Your total is $25.00  

Insérer

La méthode Insert ajoute une chaîne ou un objet à une position spécifiée dans l’objet StringBuilder actuel. L’exemple suivant utilise cette méthode pour insérer un mot à la sixième position d’un objet StringBuilder.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Insert(6,"Beautiful ");
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Insert(6, "Beautiful ")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'      Hello Beautiful World!

Supprimer

Vous pouvez utiliser la méthode Remove pour supprimer un nombre spécifié de caractères dans l’objet StringBuilder actuel, en partant d’un index de base zéro spécifié. L’exemple suivant utilise la méthode Remove pour raccourcir un objet StringBuilder.

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Remove(5,7);
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Remove(5,7);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Remove(5, 7)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello

Replace

La méthode Replace permet de remplacer des caractères dans l’objet StringBuilder par un autre caractère spécifié. L’exemple suivant utilise la méthode Replace pour rechercher toutes les instances du caractère point d’exclamation (!) dans un objet StringBuilder et les remplace par le caractère point d’interrogation (?).

StringBuilder^ myStringBuilder = gcnew StringBuilder("Hello World!");
myStringBuilder->Replace('!', '?');
Console::WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World?
StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Replace('!', '?');
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World?
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World?

Conversion d’un objet StringBuilder en chaîne

Vous devez convertir l’objet StringBuilder en objet String pour pouvoir passer la chaîne représentée par l’objet StringBuilder à une méthode qui a un paramètre String ou pour l’afficher dans l’interface utilisateur. Pour effectuer cette conversion, vous devez appeler la méthode StringBuilder.ToString. L’exemple suivant appelle un certain nombre de méthodes StringBuilder, puis appelle la méthode StringBuilder.ToString() pour afficher la chaîne.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder();
      bool flag = true;
      string[] spellings = { "recieve", "receeve", "receive" };
      sb.AppendFormat("Which of the following spellings is {0}:", flag);
      sb.AppendLine();
      for (int ctr = 0; ctr <= spellings.GetUpperBound(0); ctr++) {
         sb.AppendFormat("   {0}. {1}", ctr, spellings[ctr]);
         sb.AppendLine();
      }
      sb.AppendLine();
      Console.WriteLine(sb.ToString());
   }
}
// The example displays the following output:
//       Which of the following spellings is True:
//          0. recieve
//          1. receeve
//          2. receive
Imports System.Text

Module Example
    Public Sub Main()
        Dim sb As New StringBuilder()
        Dim flag As Boolean = True
        Dim spellings() As String = {"recieve", "receeve", "receive"}
        sb.AppendFormat("Which of the following spellings is {0}:", flag)
        sb.AppendLine()
        For ctr As Integer = 0 To spellings.GetUpperBound(0)
            sb.AppendFormat("   {0}. {1}", ctr, spellings(ctr))
            sb.AppendLine()
        Next
        sb.AppendLine()
        Console.WriteLine(sb.ToString())
    End Sub
End Module
' The example displays the following output:
'       Which of the following spellings is True:
'          0. recieve
'          1. receeve
'          2. receive

Voir aussi