StringBuilder, classe

Représente une chaîne de caractères mutable. Cette classe ne peut pas être héritée.

System.Object
  System.Text.StringBuilder

Espace de noms :  System.Text
Assembly :  mscorlib (dans mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StringBuilder : ISerializable

Le type StringBuilder expose les membres suivants.

  NomDescription
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreStringBuilder()Initialise une nouvelle instance de la classe StringBuilder.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreStringBuilder(Int32)Initialise une nouvelle instance de la classe StringBuilder à l'aide de la capacité spécifiée.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreStringBuilder(String)Initialise une nouvelle instance de la classe StringBuilder à l'aide de la chaîne spécifiée.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreStringBuilder(Int32, Int32)Initialise une nouvelle instance de la classe StringBuilder qui commence avec une capacité spécifiée et peut croître jusqu'à un maximum spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreStringBuilder(String, Int32)Initialise une nouvelle instance de la classe StringBuilder avec la chaîne et la capacité spécifiées.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreStringBuilder(String, Int32, Int32, Int32)Initialise une nouvelle instance de la classe StringBuilder à partir de la sous-chaîne et de la capacité spécifiées.
Début

  NomDescription
Propriété publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreCapacityObtient ou définit le nombre maximal de caractères que peut contenir la mémoire allouée par l'instance actuelle.
Propriété publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreCharsObtient ou définit le caractère situé à la position de caractère spécifiée dans cette instance.
Propriété publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreLengthObtient ou définit la longueur de l'objet StringBuilder actif.
Propriété publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreMaxCapacityObtient la capacité maximale de cette instance.
Début

  NomDescription
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Boolean)Ajoute à cette instance la représentation sous forme de chaîne d'une valeur booléenne spécifiée.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Byte)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 8 bits non signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Char)Ajoute à cette instance la représentation sous forme de chaîne d'un caractère Unicode spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Char[])Ajoute à de cette instance la représentation sous forme de chaîne des caractères Unicode d'un tableau spécifié.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Decimal)Ajoute à cette instance la représentation sous forme de chaîne d'un nombre décimal spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Double)Ajoute à cette instance la représentation sous forme de chaîne d'un nombre à virgule flottante double précision spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Int16)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 16 bits signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Int32)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 32 bits signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Int64)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 64 bits signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Object)Ajoute à cette instance la représentation sous forme de chaîne d'un objet spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(SByte)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 8 bits signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Single)Ajoute à cette instance la représentation sous forme de chaîne d'un nombre à virgule flottante simple précision spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(String)Ajoute une copie de la chaîne spécifiée à cette instance.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(UInt16)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 16 bits non signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(UInt32)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 32 bits non signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(UInt64)Ajoute à cette instance la représentation sous forme de chaîne d'un entier 64 bits non signé spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Char, Int32)Ajoute un nombre spécifié de copies de la représentation sous forme de chaîne d'un caractère Unicode à cette instance.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(Char[], Int32, Int32)Ajoute à cette instance la représentation sous forme de chaîne d'un sous-tableau spécifié de caractères Unicode.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppend(String, Int32, Int32)Ajoute à cette instance une copie d'une sous-chaîne spécifiée.
Méthode publiqueAppendFormat(String, Object)Ajoute la chaîne retournée par le traitement d'une chaîne de format composite, qui contient un nombre supérieur ou égal à zéro d'éléments de mise en forme, à la fin de cette instance. Chaque élément de format est remplacé par la représentation sous forme de chaîne d'un argument unique.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppendFormat(String, Object[])Ajoute la chaîne retournée par le traitement d'une chaîne de format composite, qui contient un nombre supérieur ou égal à zéro d'éléments de mise en forme, à la fin de cette instance. Chaque élément de mise en forme est remplacé par la représentation sous forme de chaîne d'un argument correspondant dans un tableau de paramètres.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppendFormat(IFormatProvider, String, Object[])Ajoute la chaîne retournée par le traitement d'une chaîne de format composite, qui contient un nombre supérieur ou égal à zéro d'éléments de mise en forme, à la fin de cette instance. Chaque élément de mise en forme est remplacé par la représentation sous forme de chaîne d'un argument correspondant dans un tableau de paramètres à l'aide d'un fournisseur de format spécifié.
Méthode publiqueAppendFormat(String, Object, Object)Ajoute la chaîne retournée par le traitement d'une chaîne de format composite, qui contient un nombre supérieur ou égal à zéro d'éléments de mise en forme, à la fin de cette instance. Chaque élément de format est remplacé par la représentation sous forme de chaîne de l'un des deux arguments possibles.
Méthode publiqueAppendFormat(String, Object, Object, Object)Ajoute la chaîne retournée par le traitement d'une chaîne de format composite, qui contient un nombre supérieur ou égal à zéro d'éléments de mise en forme, à la fin de cette instance. Chaque élément de format est remplacé par la représentation sous forme de chaîne de l'un des trois arguments possibles.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppendLine()Ajoute la marque de fin de ligne par défaut à la fin de l'objet StringBuilder en cours.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreAppendLine(String)Ajoute une copie de la chaîne spécifiée suivie de la marque de fin de ligne par défaut à la fin de l'objet StringBuilder actif.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreClearSupprime tous les caractères de l'instance StringBuilder actuelle.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreCopyToCopie les caractères d'un segment spécifié de cette instance vers un segment spécifié d'un tableau Char de destination.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreEnsureCapacityGarantit que la capacité de cette instance de StringBuilder est au moins égale à la valeur spécifiée.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreEquals(Object)Détermine si l'objet spécifié est identique à l'objet actuel. (Hérité de Object.)
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreEquals(StringBuilder)Renvoie une valeur indiquant si cette instance équivaut à un objet spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreGetHashCodeSert de fonction de hachage par défaut. (Hérité de Object.)
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreGetTypeObtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Boolean)Insère dans cette instance la représentation sous forme de chaîne d'une valeur booléenne, à la position de caractère spécifiée.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Byte)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier non signé de 8 bits spécifié.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Char)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un caractère Unicode spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Char[])Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un tableau de caractères Unicode spécifié.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Decimal)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un nombre décimal.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Double)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un nombre à virgule flottante double précision.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Int16)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier signé 16 bits spécifié.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Int32)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier signé 32 bits spécifié.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Int64)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier signé de 64 bits.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Object)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un objet.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, SByte)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier signé 8 bits spécifié.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Single)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un nombre à virgule flottante simple précision.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, String)Insère une chaîne dans cette instance à la position de caractère spécifiée.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, UInt16)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier non signé 16 bits.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, UInt32)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier non signé 32 bits.
Méthode publiquePris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, UInt64)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un entier non signé 64 bits.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, String, Int32)Insère dans cette instance une ou plusieurs copies d'une chaîne spécifiée à la position de caractère spécifiée.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreInsert(Int32, Char[], Int32, Int32)Insère dans cette instance, à la position de caractère spécifiée, la représentation sous forme de chaîne d'un sous-tableau de caractères Unicode spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreRemoveSupprime de cette instance la plage de caractères spécifiée.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreReplace(Char, Char)Remplace toutes les occurrences dans cette instance d'un caractère spécifié par un autre caractère spécifié.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreReplace(String, String)Remplace toutes les occurrences dans cette instance d'une chaîne spécifiée par une autre chaîne spécifiée.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreReplace(Char, Char, Int32, Int32)Remplace toutes les occurrences d'un caractère spécifié par un autre caractère spécifié, dans une sous-chaîne de cette instance.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreReplace(String, String, Int32, Int32)Remplace toutes les occurrences d'une chaîne spécifiée par une autre chaîne spécifiée, dans une sous-chaîne de cette instance.
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreToString()Convertit la valeur de cette instance en String. (Substitue Object.ToString().)
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreToString(Int32, Int32)Convertit la valeur d'une sous-chaîne de cette instance en String.
Début

  NomDescription
Implémentation d'interface expliciteMéthode privéeISerializable.GetObjectDataInfrastructure. Remplit un objet System.Runtime.Serialization.SerializationInfo avec les données nécessaires à la désérialisation de l'objet StringBuilder en cours.
Début

Cette classe représente un objet qui ressemble à une chaîne et dont la valeur est une séquence de caractères mutable.

Dans cette section :

Les types String et StringBuilder

Bien que StringBuilder et String représentent des séquences de caractères, ils sont implémentés différemment. String est un type immuable. Autrement dit, chaque opération qui apparaît modifier un objet String crée en fait une nouvelle chaîne.

Par exemple, l'appel à la méthode String.Concat dans l'exemple C# suivant apparaît modifier la valeur d'une variable de chaîne nommée value. En fait, la méthode Concat retourne un objet value qui a une valeur et une adresse différentes de l'objet value passé à la méthode. Notez que l'exemple doit être compilé en utilisant l'option du compilateur /unsafe.


using System;

public class Example
{
   public unsafe static void Main()
   {
      string value = "This is the first sentence" + ".";
      fixed (char* start = value)
      {
         value = String.Concat(value, "This is the second sentence. ");
         fixed (char* current = value)
         {
            Console.WriteLine(start == current);
         }
      }   
   }
}
// The example displays the following output:
//      False


Pour les routines qui exécutent une manipulation de chaînes étendue (comme les applications qui modifient une chaîne à plusieurs reprises dans une boucle), la modification d'une chaîne à plusieurs reprises peut engendrer une altération significative des performances. L'alternative consiste à utiliser StringBuilder, qui est une classe mutable de chaîne. La mutabilité signifie qu'une fois qu'une instance de la classe a été créée, elle peut être modifiée en ajoutant, supprimant, en remplaçant, ou en insérant des caractères. Un objet StringBuilder gère une mémoire tampon pour tenir compte des expansions de la chaîne. Les nouvelles données sont ajoutées à la mémoire tampon si l'espace nécessaire est disponible; sinon, une nouvelle mémoire tampon, plus grande, est allouée, les données de la mémoire tampon d'origine sont copiées dans la nouvelle mémoire tampon, et les nouvelles données sont ajoutées à la nouvelle mémoire tampon.

Remarque importanteImportant

Bien que la classe StringBuilder offre généralement de meilleures performances que la classe String, vous ne devez pas automatiquement remplacer String par StringBuilder à chaque fois que vous souhaitez manipuler des chaînes. La performance dépend de la taille de la chaîne, la quantité de mémoire à allouer pour la nouvelle chaîne, le système sur lequel votre application s'exécute, et le type d'opération. Vous devez vous attendre à tester votre application pour déterminer si StringBuilder offre réellement une amélioration significative des performances.

Utilisez la classe String dans les conditions suivantes :

  • Lorsque le nombre de modifications que votre application effectuera à une chaîne est petit. Dans ces cas, StringBuilder peut offrir une amélioration négligeable des performances par rapport à String, voire aucune amélioration.

  • Lorsque vous effectuez un nombre fixe d'opérations de concaténation, en particulier des littéraux de chaîne. Dans ce cas, le compilateur peut combiner les opérations de concaténation dans une opération unique.

  • Lorsque vous devez exécuter des opérations de recherche étendues lorsque vous générez votre chaîne. La classe StringBuilder manque de méthodes de recherche telles que IndexOf ou StartsWith. Vous devez convertir l'objet StringBuilder à String pour ces opérations, et cela peut annuler l'amélioration des performances obtenue en utilisant StringBuilder. Pour plus d'informations, consultez la section Recherche du texte dans un objet StringBuilder.

Utilisez la classe StringBuilder dans les conditions suivantes :

  • Lorsque vous escomptez que votre application va apporter un nombre inconnu de modifications à une chaîne au moment du design (par exemple, lorsque vous utilisez une boucle pour concaténer un nombre arbitraire de chaînes qui contiennent des entrées utilisateur).

  • Lorsque vous escomptez que votre application va apporter un nombre significatif de modifications dans une chaîne.

Comment StringBuilder fonctionne

La propriété StringBuilder.Length indique le nombre de caractères que l'objet StringBuilder contient actuellement. Si vous ajoutez des caractères à l'objet StringBuilder, sa longueur augmente jusqu'à ce qu'elle soit égale à la taille de la propriété StringBuilder.Capacity, qui définit le nombre de caractères que l'objet peut contenir. Si le nombre de caractères ajoutés fait que la longueur de l'objet StringBuilder dépasse sa capacité actuelle, de la nouvelle mémoire est allouée, la valeur de la propriété Capacity est doublée, de nouveaux caractères sont ajoutés à l'objet StringBuilder, et sa propriété Length est ajustée. De la mémoire supplémentaire pour l'objet StringBuilder est allouée dynamiquement jusqu'à ce qu'elle atteigne la valeur définie par la propriété StringBuilder.MaxCapacity. Lorsque la capacité maximale est atteinte, aucune mémoire supplémentaire ne peut être allouée pour l'objet StringBuilder, et tenter d'ajouter des caractères ou de le développer au delà de sa capacité maximale lève une exception ArgumentOutOfRangeException ou OutOfMemoryException.

L'exemple suivant montre comment un objet StringBuilder alloue de la nouvelle mémoire et étend sa capacité dynamiquement lorsque la chaîne assignée à l'objet se développe. Le code crée un objet StringBuilder en appelant son constructeur par défaut (sans paramètre). La capacité par défaut de cet objet est de 16 caractères, et sa capacité maximale est supérieure à 2 milliards de caractères. Ajouter la chaîne « Il s'agit d'une phrase. » a pour effet l'allocation d'une nouvelle mémoire car la longueur de chaîne (19 caractères) dépasse la capacité par défaut de l'objet StringBuilder. La capacité de l'objet double pour passer à 32 caractères, la nouvelle chaîne est ajoutée, et la longueur de l'objet est maintenant 19 caractères. Le code ajoute ensuite la chaîne « Ceci a une phrase supplémentaire. » à la valeur de l'objet StringBuilder 11 fois. Chaque fois que l'addition fait que la longueur de l'objet StringBuilder dépasse sa capacité, sa capacité existante est doublée et l'opération Append réussit.


using System;
using System.Reflection;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder();
      ShowSBInfo(sb);
      sb.Append("This is a sentence.");
      ShowSBInfo(sb);
      for (int ctr = 0; ctr <= 10; ctr++) {
         sb.Append("This is an additional sentence.");
         ShowSBInfo(sb);
      }   
   }

   private static void ShowSBInfo(StringBuilder sb)
   {
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Capacity: 16    MaxCapacity: 2,147,483,647    Length: 0
//    Capacity: 32    MaxCapacity: 2,147,483,647    Length: 19
//    Capacity: 64    MaxCapacity: 2,147,483,647    Length: 50
//    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 81
//    Capacity: 128    MaxCapacity: 2,147,483,647    Length: 112
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 143
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 174
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 205
//    Capacity: 256    MaxCapacity: 2,147,483,647    Length: 236
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 267
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 298
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 329
//    Capacity: 512    MaxCapacity: 2,147,483,647    Length: 360


Allocation de mémoire

La capacité par défaut d'un objet StringBuilder est de 16 caractères, et sa capacité maximale par défaut est Int32.MaxValue. Ces valeurs par défaut sont utilisées si vous appelez les constructeurs StringBuilder() et StringBuilder(String).

Vous pouvez définir explicitement la capacité initiale d'un objet StringBuilder des façons suivantes:

  • En appelant un des constructeurs StringBuilder qui inclut un paramètre capacity lorsque vous créez l'objet.

  • En assignant explicitement une nouvelle valeur à la propriété StringBuilder.Capacity pour développer un objet StringBuilder existant. Notez que la propriété lève une exception si la nouvelle fonctionnalité est plus faible que la capacité existante ou supérieure à la capacité maximale de l'objet StringBuilder.

  • En appelant la méthode StringBuilder.EnsureCapacity avec la nouvelle capacité. La nouvelle capacité ne doit pas être supérieure à la capacité maximale de l'objet StringBuilder. Toutefois, contrairement à une assignation à la propriété Capacity, EnsureCapacity ne lève pas d'exception si la nouvelle fonctionnalité souhaitée est plus faible que la capacité existante; dans ce cas, l'appel de méthode n'a aucun effet.

Si la longueur de la chaîne assignée à l'objet StringBuilder dans l'appel de constructeur dépasse soit la capacité par défaut ou la capacité spécifiée, la propriété Capacity est fixée à la longueur de la chaîne spécifiée avec le paramètre value.

Définissez explicitement la capacité maximale d'un objet StringBuilder en appelant le constructeur StringBuilder(Int32, Int32). Vous ne pouvez pas modifier la capacité maximale en assignant une nouvelle valeur à la propriété MaxCapacity, car elle est en lecture seule.

Comme la section précédente l'indique, chaque fois que la capacité existante est insuffisante, de la mémoire supplémentaire est allouée et la capacité d'un objet StringBuilder double jusqu'à la valeur définie par la propriété MaxCapacity.

En général, la capacité par défaut et la capacité maximale sont adéquates pour la plupart des applications. Vous pouvez envisager de définir ces valeurs dans les conditions suivantes:

  • Si la taille éventuelle de l'objet StringBuilder risque de devenir excessivement élevée, généralement avec un excess de plusieurs mégaoctets. Dans ce cas, il peut y avoir quelques avantages en termes de performances à définir la propriété initiale Capacity à une valeur considérablement élevée pour éliminer la nécessité de trop de réaffectations de mémoire.

  • Si votre application s'exécute sur un système avec une mémoire limitée. Dans ce cas, vous pouvez envisager de définir la propriété MaxCapacity inférieure à Int32.MaxValue si votre application gère des grandes chaînes qui peuvent l'entrainer à s'exécuter dans un environnement limité en mémoire.

Instanciation d'un objet StringBuilder

Vous instanciez un objet StringBuilder en appelant l'un de ses six constructeurs de classe surchargés, répertoriés dans le tableau suivant. Trois des constructeurs instancient un objet StringBuilder dont la valeur est une chaîne vide, mais définissent ses valeurs Capacity et MaxCapacity différemment. Les trois constructeurs restants définissent un objet StringBuilder qui a une valeur de chaîne et une capacité spécifiques. Deux des trois constructeurs utilisent la capacité maximale par défaut de Int32.MaxValue, tandis que le troisième vous permet de définir la capacité maximale.

Constructeur

Valeur de chaîne

Capacité

Capacité maximale

StringBuilder()

String.Empty

16

Int32.MaxValue

StringBuilder(Int32)

String.Empty

Défini par le paramètre capacity.

Int32.MaxValue

StringBuilder(Int32, Int32)

String.Empty

Défini par le paramètre capacity.

Défini par le paramètre maxCapacity.

StringBuilder(String)

Défini par le paramètre value.

16 ou value. Length , celui qui est le plus grand

Int32.MaxValue

StringBuilder(String, Int32)

Défini par le paramètre value.

Défini par le paramètre capacity ou value. Length , celui qui est le plus grand.

Int32.MaxValue

StringBuilder(String, Int32, Int32, Int32)

Défini par value Substring (startIndex, length)

Défini par le paramètre capacity ou value. Length , celui qui est le plus grand.

Défini par le paramètre maxCapacity.

L'exemple suivant utilise trois de ces surcharges de constructeurs pour instancier des objets StringBuilder.


using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      string value = "An ordinary string";
      int index = value.IndexOf("An ") + 3;
      int capacity = 0xFFFF;

      // Instantiate a StringBuilder from a string.
      StringBuilder sb1 = new StringBuilder(value);
      ShowSBInfo(sb1); 

      // Instantiate a StringBuilder from string and define a capacity.  
      StringBuilder sb2 = new StringBuilder(value, capacity);   
      ShowSBInfo(sb2); 

      // Instantiate a StringBuilder from substring and define a capacity.  
      StringBuilder sb3 = new StringBuilder(value, index, 
                                            value.Length - index, 
                                            capacity );
      ShowSBInfo(sb3); 
   }

   public static void ShowSBInfo(StringBuilder sb)
   {
      Console.WriteLine("\nValue: {0}", sb.ToString());
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Value: An ordinary string
//    Capacity: 18    MaxCapacity: 2,147,483,647    Length: 18
//    
//    Value: An ordinary string
//    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 18
//    
//    Value: ordinary string
//    Capacity: 65,535    MaxCapacity: 2,147,483,647    Length: 15


Appel de méthodes StringBuilder

La plupart des méthodes qui modifient la chaîne dans une instance StringBuilder retournent une référence à cette même instance. Cela vous permet d'appeler des méthodes StringBuilder de deux façons:

  • Faites des appels individuels de méthode et ignorer la valeur de retour, comme dans l'exemple suivant.

    
    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          StringBuilder sb = new StringBuilder();
          sb.Append("This is the beginning of a sentence, ");
          sb.Replace("the beginning of ", "");
          sb.Insert(sb.ToString().IndexOf("a ") + 2, "complete ");
          sb.Replace(",", ".");
          Console.WriteLine(sb.ToString());
       }
    }
    // The example displays the following output:
    //        This is a complete sentence.
    
    
    
  • Effectuez une série d'appels de méthodes dans une instruction unique. Cela peut s'avérer pratique si vous voulez écrire une seule instruction qui enchaîne des opérations successives. L'exemple suivant consolide trois appels de méthode de l'exemple précédent dans une seule ligne de code.

    
    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          StringBuilder sb = new StringBuilder("This is the beginning of a sentence, ");
          sb.Replace("the beginning of ", "").Insert(sb.ToString().IndexOf("a ") + 2, 
                                                     "complete ").Replace(",", ".");
          Console.WriteLine(sb.ToString());
       }
    }
    // The example displays the following output:
    //        This is a complete sentence.
    
    
    

Effectuer des opérations StringBuilder

Utilisez les méthodes de classe StringBuilder pour itérer, ajouter, supprimer, ou modifier des caractères dans un objet StringBuilder.

y9sxk6fy.collapse_all(fr-fr,VS.110).gifItération de caractères StringBuilder

Accédez aux caractères dans un objet StringBuilder en utilisant la propriété StringBuilder.Chars. Dans C#, Chars est un indexeur; dans Visual Basic, c'est la propriété par défaut de la classe StringBuilder. Cela vous permet de définir ou récupérer des caractères individuels via leur index uniquement, sans référencer explicitement la propriété Chars. Les caractères dans un objet StringBuilder commencent à l'index 0 (zéro) et continuent à indexer Length - 1.

L'exemple suivant illustre la propriété Chars. Il ajoute dix nombres aléatoires à un objet StringBuilder, puis itère chaque caractère. Si la catégorie Unicode du caractère est UnicodeCategory.DecimalDigitNumber, il diminue le nombre de 1 (ou change le nombre en 9 si sa valeur est 0). L'exemple affiche le contenu de l'objet StringBuilder avant et après que les valeurs des caractères individuels aient été modifiées.


using System;
using System.Globalization;
using System.Text;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      StringBuilder sb = new StringBuilder();

      // Generate 10 random numbers and store them in a StringBuilder.
      for (int ctr = 0; ctr <= 9; ctr++)
         sb.Append(rnd.Next().ToString("N5"));    

      Console.WriteLine("The original string:");
      Console.WriteLine(sb.ToString());

      // Decrease each number by one.
      for (int ctr = 0; ctr < sb.Length; ctr++) {
         if (Char.GetUnicodeCategory(sb[ctr]) == UnicodeCategory.DecimalDigitNumber) {
            int number = (int) Char.GetNumericValue(sb[ctr]);
            number--;
            if (number < 0) number = 9;

            sb[ctr] = number.ToString()[0];
         }
      }
      Console.WriteLine("\nThe new string:");
      Console.WriteLine(sb.ToString());
   }
}
// The example displays the following output:
//    The original string:
//    1,457,531,530.00000940,522,609.000001,668,113,564.000001,998,992,883.000001,792,660,834.00
//    000101,203,251.000002,051,183,075.000002,066,000,067.000001,643,701,043.000001,702,382,508
//    .00000
//    
//    The new string:
//    0,346,420,429.99999839,411,598.999990,557,002,453.999990,887,881,772.999990,681,559,723.99
//    999090,192,140.999991,940,072,964.999991,955,999,956.999990,532,690,932.999990,691,271,497
//    .99999


y9sxk6fy.collapse_all(fr-fr,VS.110).gifAjout de texte à un objet StringBuilder

La classe StringBuilder inclut les méthodes suivantes pour développer le contenu d'un objet StringBuilder:

  • La méthode Append ajoute une chaîne, une sous-chaîne, un tableau de caractères, une partie d'un tableau de caractères, un caractère unique répété plusieurs fois, ou la représentation sous forme de chaîne d'un type de données primitif à un objet StringBuilder.

  • La méthode AppendLine ajoute un terminateur de ligne ou une chaîne avec un terminateur de ligne à un objet StringBuilder.

  • La méthode AppendFormat ajoute chaîne de format composite à un objet StringBuilder. Les représentations sous forme de chaîne des objets inclus dans la chaîne de résultat peuvent refléter les conventions de mise en forme de la culture du système actuelle ou d'une culture spécifiée.

  • La méthode Insert insère une chaîne, une sous-chaîne, plusieurs répétitions d'une chaîne, un tableau de caractères, une partie d'un tableau de caractères, ou la représentation sous forme de chaîne d'un type de données primitif à un emplacement spécifié dans l'objet StringBuilder. La position est définie par un index de base zéro.

L'exemple suivant utilise les méthodes Append, AppendLine, AppendFormat, et Insert pour développer le texte d'un objet StringBuilder.


using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      // Create a StringBuilder object with no text.
      StringBuilder sb = new StringBuilder();
      // Append some text.
      sb.Append('*', 10).Append(" Adding Text to a StringBuilder Object ").Append('*', 10);
      sb.AppendLine("\n");
      sb.AppendLine("Some code points and their corresponding characters:");
      // Append some formatted text.
      for (int ctr = 50; ctr <= 60; ctr++) {
         sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr));
         sb.AppendLine();
      }
      // Find the end of the introduction to the column.
      int pos = sb.ToString().IndexOf("characters:") + 11 + 
                Environment.NewLine.Length;
      // Insert a column header.
      sb.Insert(pos, String.Format("{2}{0,12:X4} {1,12}{2}", "Code Unit", 
                                   "Character", "\n"));      

      // Convert the StringBuilder to a string and display it.      
      Console.WriteLine(sb.ToString());      
   }
}
// The example displays the following output:
//    ********** Adding Text to a StringBuilder Object **********
//    
//    Some code points and their corresponding characters:
//    
//       Code Unit    Character
//            0032            2
//            0033            3
//            0034            4
//            0035            5
//            0036            6
//            0037            7
//            0038            8
//            0039            9
//            003A            :
//            003B            ;
//            003C            <


y9sxk6fy.collapse_all(fr-fr,VS.110).gifSuppression de texte d'un objet StringBuilder

La classe StringBuilder inclut des méthodes qui peuvent réduire la taille de l'instance actuelle StringBuilder. La méthode Clear supprime tous les caractères et définit la propriété Length à zéro. La méthode Remove supprime un nombre spécifié de caractères en commençant à une position d'index particulière. En outre, supprimez des caractères de la fin d'un objet StringBuilder en définissant sa propriété Length à une valeur inférieure à la longueur de l'instance actuelle.

L'exemple suivant supprime une partie du texte d'un objet StringBuilder, affiche sa capacité, capacité résultante, sa capacité maximale, et le valeurs de la longueur de la propriété, puis appelle la méthode Clear pour supprimer tous les caractères de l'objet StringBuilder.


using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder("A StringBuilder object");
      ShowSBInfo(sb);
      // Remove "object" from the text.
      string textToRemove = "object";
      int pos = sb.ToString().IndexOf(textToRemove);
      if (pos >= 0) {
         sb.Remove(pos, textToRemove.Length);
         ShowSBInfo(sb);
      }
      // Clear the StringBuilder contents.
      sb.Clear();
      ShowSBInfo(sb);   
   }

   public static void ShowSBInfo(StringBuilder sb)
   {
      Console.WriteLine("\nValue: {0}", sb.ToString());
      foreach (var prop in sb.GetType().GetProperties()) {
         if (prop.GetIndexParameters().Length == 0)
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb));
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    Value: A StringBuilder object
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 22
//    
//    Value: A StringBuilder
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 16
//    
//    Value:
//    Capacity: 22    MaxCapacity: 2,147,483,647    Length: 0


y9sxk6fy.collapse_all(fr-fr,VS.110).gifModification du texte dans un objet StringBuilder

La méthode StringBuilder.Replace remplace toutes les occurrences d'un caractère ou d'une chaîne dans l'objet StringBuilder entier ou dans une plage de caractères particulière. L'exemple suivant utilise la méthode Replace pour remplacer tous les points d'exclamation (!) par des points d'interrogation (?) dans l'objet StringBuilder.


using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
      MyStringBuilder.Replace('!', '?');
      Console.WriteLine(MyStringBuilder);
   }
}
// The example displays the following output:
//       Hello World?


Recherche du texte dans un objet StringBuilder

La classe StringBuilder n'inclut pas les méthodes semblables à String.Contains, String.IndexOf, et aux méthodes String.StartsWith fournies par la classe String, qui vous permettent de rechercher un caractère particulier ou une sous-chaîne dans l'objet. La détermination de la présence ou de la position du caractère de départ d'une sous-chaîne requiert que vous recherchiez une valeur String à l'aide d'une méthode de recherche de chaînes ou d'une méthode d'expression régulière. Il existe quatre façons d'implémenter ces recherches, comme indiqué dans le tableau suivant.

Technique

Avantages

Cons

Recherche de valeurs de chaîne avant de les ajouter à l'objet StringBuilder.

Pratique pour déterminer si une sous-chaîne existe.

Ne peut pas être utilisé lorsque l'index de position d'une sous-chaîne est important.

Appelez ToString et recherchez l'objet String retourné.

Simple à utiliser si vous assignez tout le texte à un objet StringBuilder, puis commencez à le modifier.

Encombrant pour appeler à plusieurs reprises ToString si vous devez apporter des modifications avant que tout le texte ne soit ajouté à l'objet StringBuilder.

Vous devez penser à travailler de la fin du texte de l'objet StringBuilder si vous effectuez des modifications.

Utilisez la propriété Chars pour rechercher de manière séquentielle une plage de caractères.

Cela peut être utile si vous êtes concernés par des caractères individuels ou une petite sous-chaîne.

Encombrant si le nombre de caractères à explorer est grand ou si la logique de recherche est complexe.

Convertissez l'objet StringBuilder à un objet String, puis exécutez les modifications sur l'objet String.

Utile si le nombre de modifications est petit.

Annule l'amélioration des performances de la classe StringBuilder si le nombre de modifications est important.

Examinons ces techniques plus en détail.

  • Si l'objectif de la recherche consiste à déterminer si une sous-chaîne particulière existe (autrement dit, si vous n'êtes pas intéressé par la position de la sous-chaîne), cherchez des chaînes avant des stocker dans l'objet StringBuilder. L'exemple suivant présente une implémentation possible. Il définit une classe StringBuilderFinder dont le constructeur passe une référence à un objet StringBuilder et la sous-chaîne à trouver dans la chaîne. Dans ce cas, l'exemple essaye de déterminer si les températures stockées sont en degrés Fahrenheit ou en Celsius, et ajoute le texte préliminaire approprié au début de l'objet StringBuilder. Un générateur de nombres aléatoires est utilisé pour sélectionner un tableau qui contient les données en degrés Celsius ou degrés Fahrenheit.

    
    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          Random rnd = new Random();
          string[] tempF = { "47.6F", "51.3F", "49.5F", "62.3F" };
          string[] tempC = { "21.2C", "16.1C", "23.5C", "22.9C" };
          string[][] temps = { tempF, tempC }; 
    
          StringBuilder sb = new StringBuilder();
          var f = new StringBuilderFinder(sb, "F");
          var baseDate = new DateTime(2013, 5, 1); 
          String[] temperatures = temps[rnd.Next(2)];
          bool isFahrenheit = false;
          foreach (var temperature in temperatures) {
             if (isFahrenheit)
                sb.AppendFormat("{0:d}: {1}\n", baseDate, temperature);
             else
                isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}\n", 
                                                 baseDate, temperature));
             baseDate = baseDate.AddDays(1);
          }            
          if (isFahrenheit) {
             sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit");
             sb.Insert(47, "\n\n");
          }
          else {
             sb.Insert(0, "Average Daily Temperature in Degrees Celsius");
             sb.Insert(44, "\n\n");
          }   
          Console.WriteLine(sb.ToString());
       }
    }
    
    public class StringBuilderFinder
    {
       private StringBuilder sb;
       private String text;
    
       public StringBuilderFinder(StringBuilder sb, String textToFind)
       {
          this.sb = sb;
          this.text = textToFind;
       }
    
       public bool SearchAndAppend(String stringToSearch)
       {
          sb.Append(stringToSearch);
          return stringToSearch.Contains(text);
       }
    }
    // The example displays output similar to the following:
    //    Average Daily Temperature in Degrees Celsius
    //    
    //    5/1/2013: 21.2C
    //    5/2/2013: 16.1C
    //    5/3/2013: 23.5C
    //    5/4/2013: 22.9C
    
    
    
  • Appelez la méthode StringBuilder.ToString pour convertir l'objet StringBuilder en un objet String. Recherchez la chaîne en utilisant des méthodes telles que String.LastIndexOf ou String.StartsWith, ou utilisez des expressions régulières et la classe Regex pour rechercher des modèles. Comme les objets StringBuilder et String utilisent l'encodage UTF-16 pour stocker des caractères, les indexes de position des caractères, des sous-chaînes, et les correspondances d'expression régulière sont identiques dans les deux objets. Vous pouvez ainsi utiliser des méthodes StringBuilder pour apporter des modifications à la même position à laquelle le texte est trouvé dans l'objet String.

    RemarqueRemarque

    Si vous adoptez cette approche, vous devez travailler de la fin de l'objet StringBuilder à son début afin que vous n'ayez pas à plusieurs reprises convertir l'objet StringBuilder en chaîne.

    L'exemple suivant illustre cette approche. Elle stocke quatre occurrences de chaque lettre de l'alphabet anglais dans un objet StringBuilder. Ensuite elle convertit le texte à un objet String et utilise une expression régulière pour identifier la position de départ de chaque séquence de quatre caractères. Enfin, elle ajoute un trait de soulignement avant chaque séquence de quatre caractères à l'exception de la première séquence, et convertit le premier caractère de la séquence en majuscules.

    
    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort)'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
    
          // Create a parallel string object.
          String sbString = sb.ToString();
          // Determine where each new character sequence begins.
          String pattern = @"(\w)\1+";
          MatchCollection matches = Regex.Matches(sbString, pattern);
    
          // Uppercase the first occurrence of the sequence, and separate it
          // from the previous sequence by an underscore character.
          for (int ctr = matches.Count - 1; ctr >= 0; ctr--) { 
             Match m = matches[ctr];
             sb[m.Index] = Char.ToUpper(sb[m.Index]);
             if (m.Index > 0) sb.Insert(m.Index, "_");
          }
          // Display the resulting string.
          sbString = sb.ToString();
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    
    
  • Utilisez la propriété StringBuilder.Chars pour rechercher séquentiellement une plage de caractères dans un objet StringBuilder. Cette approche peut ne pas être pratique si le nombre de caractères à rechercher est élevé ou la logique de recherche est particulièrement complexe.

    L'exemple suivant est identique en fonctionnalité à l'exemple précédent mais diffère en implémentation. Il utilise la propriété Chars pour détecter lorsqu'une valeur de caractère a changé, insère un trait de soulignement à cette position, et convertit le premier caractère de la nouvelle séquence en majuscule.

    
    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort) 'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
    
          // Iterate the text to determine when a new character sequence occurs.
          int position = 0;
          Char current = '\u0000';
          do {
             if (sb[position] != current) {
                current = sb[position];
                sb[position] = Char.ToUpper(sb[position]);
                if (position > 0) 
                   sb.Insert(position, "_");
                position += 2;
             }
             else {
                position++;
             }      
          } while (position <= sb.Length - 1);
          // Display the resulting string.
          String sbString = sb.ToString();
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    
    
  • Stockez tout le texte non modifié dans l'objet StringBuilder, appelez la méthode StringBuilder.ToString pour convertir l'objet StringBuilder en un objet String, puis exécutez les modifications sur l'objet String. Utilisez cette approche si vous avez uniquement quelques modifications; sinon, le coût de travail avec les chaînes immuables peut annuler les avantages en terme de performances obtenues en utilisant un objet StringBuilder.

    L'exemple suivant est identique en fonctionnalité aux deux exemples précédents mais diffère en implémentation. Elle crée un objet StringBuilder, le convertit en un objet String, puis utilise une expression régulière pour exécuter toutes les modifications restantes dans la chaîne. La méthode Regex.Replace(String, String, MatchEvaluator) utilise une expression lambda pour effectuer le remplacement sur chaque correspondance.

    
    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          // Create a StringBuilder object with 4 successive occurrences 
          // of each character in the English alphabet. 
          StringBuilder sb = new StringBuilder();
          for (ushort ctr = (ushort)'a'; ctr <= (ushort) 'z'; ctr++)
             sb.Append(Convert.ToChar(ctr), 4);
    
          // Convert it to a string.
          String sbString = sb.ToString();
    
          // Use a regex to uppercase the first occurrence of the sequence, 
          // and separate it from the previous sequence by an underscore.
          string pattern = @"(\w)(\1+)";
          sbString = Regex.Replace(sbString, pattern, 
                                   m => (m.Index > 0 ? "_" : "") + 
                                   m.Groups[1].Value.ToUpper() + 
                                   m.Groups[2].Value);
    
          // Display the resulting string.
          int line = 0;
          do {
             int nChars = line * 80 + 79 <= sbString.Length ? 
                                 80 : sbString.Length - line * 80;
             Console.WriteLine(sbString.Substring(line * 80, nChars));
             line++;
          } while (line * 80 < sbString.Length);
       }
    }
    // The example displays the following output:
    //    Aaaa_Bbbb_Cccc_Dddd_Eeee_Ffff_Gggg_Hhhh_Iiii_Jjjj_Kkkk_Llll_Mmmm_Nnnn_Oooo_Pppp_
    //    Qqqq_Rrrr_Ssss_Tttt_Uuuu_Vvvv_Wwww_Xxxx_Yyyy_Zzzz
    
    
    

Conversion de l'objet StringBuilder en une chaîne

Vous devez convertir l'objet StringBuilder en un objet String avant de pouvoir passer la chaîne représentée par l'objet StringBuilder à une méthode qui contient un paramètre String ou l'afficher dans l'interface utilisateur. Pour effectuer cette conversion, appelez la méthode StringBuilder.ToString. Pour obtenir une illustration, consultez l'exemple précédent, qui appelle la méthode ToString pour convertir un objet StringBuilder en une chaîne afin qu'il puisse être passé à une méthode d'expression régulière.

Remarques à l'attention des appelants

Dans .NET Framework 4 et .NET Framework 4.5, lorsque vous instanciez l'objet StringBuilder en appelant le constructeur StringBuilder(Int32, Int32), la longueur et l'instance StringBuilder peuvent développer au delà de la valeur de sa propriété MaxCapacity. Cela peut se produire en particulier lorsque vous appelez les méthodes Append et AppendFormat pour ajouter de petites chaînes.

L'exemple suivant montre comment appeler la plupart des méthodes définies par la classe StringBuilder.


using System;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        // Create a StringBuilder that expects to hold 50 characters.
        // Initialize the StringBuilder with "ABC".
        StringBuilder sb = new StringBuilder("ABC", 50);

        // Append three characters (D, E, and F) to the end of the StringBuilder.
        sb.Append(new char[] { 'D', 'E', 'F' });

        // Append a format string to the end of the StringBuilder.
        sb.AppendFormat("GHI{0}{1}", 'J', 'k');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());

        // Insert a string at the beginning of the StringBuilder.
        sb.Insert(0, "Alphabet: ");

        // Replace all lowercase k's with uppercase K's.
        sb.Replace('k', 'K');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());
    }
}

// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft