StringBuilder StringBuilder StringBuilder StringBuilder Class

Definición

Representa una cadena de caracteres mutable.Represents a mutable string of characters. Esta clase no puede heredarse.This class cannot be inherited.

public ref class StringBuilder sealed : System::Runtime::Serialization::ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class StringBuilder : System.Runtime.Serialization.ISerializable
type StringBuilder = class
    interface ISerializable
Public NotInheritable Class StringBuilder
Implements ISerializable
Herencia
StringBuilderStringBuilderStringBuilderStringBuilder
Atributos
Implementaciones

Ejemplos

El ejemplo siguiente muestra cómo llamar a muchos de los métodos definidos por el StringBuilder clase.The following example shows how to call many of the methods defined by the StringBuilder class.

using namespace System;
using namespace System::Text;

int main()
{
    // Create a StringBuilder that expects to hold 50 characters.
    // Initialize the StringBuilder with "ABC".
    StringBuilder^ sb = gcnew StringBuilder("ABC", 50);

    // Append three characters (D, E, and F) to the end of the
    // StringBuilder.
    sb->Append(gcnew array<Char>{'D', 'E', 'F'});

    // Append a format string to the end of the StringBuilder.
    sb->AppendFormat("GHI{0}{1}", (Char)'J', (Char)'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
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
Imports System.Text

Public Module App 
    Public Sub Main() 
        ' Create a StringBuilder that expects to hold 50 characters.
        ' Initialize the StringBuilder with "ABC".
        Dim sb As New StringBuilder("ABC", 50)

        ' Append three characters (D, E, and F) to the end of the StringBuilder.
        sb.Append(New Char() {"D"c, "E"c, "F"c})

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

        ' 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())
    End Sub
End Module

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

Comentarios

Esta clase representa un objeto de tipo cadena cuyo valor es una secuencia de caracteres mutable.This class represents a string-like object whose value is a mutable sequence of characters.

En esta sección:In this section:

Los tipos String y StringBuilderThe String and StringBuilder types

Aunque StringBuilder y String los dos representan secuencias de caracteres, se implementan de manera diferente.Although StringBuilder and String both represent sequences of characters, they are implemented differently. String es un tipo inmutable.String is an immutable type. Es decir, cada operación que aparece para modificar un String objeto realmente crea una nueva cadena.That is, each operation that appears to modify a String object actually creates a new string.

Por ejemplo, la llamada a la String.Concat aparece el método en el siguiente ejemplo de C# cambiar el valor de una variable de cadena denominada value.For example, the call to the String.Concat method in the following C# example appears to change the value of a string variable named value. De hecho, el Concat método devuelve un value objeto que tiene un valor diferente y una dirección de la value objeto que se pasó al método.In fact, the Concat method returns a value object that has a different value and address from the value object that was passed to the method. Tenga en cuenta que se debe compilar el ejemplo con el /unsafe opción del compilador.Note that the example must be compiled using the /unsafe compiler option.

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

Las rutinas que realizan la manipulación de cadenas amplia (por ejemplo, las aplicaciones que modifican una cadena de varias veces en un bucle), modificar varias veces una cadena puede suponer una reducción significativa del rendimiento.For routines that perform extensive string manipulation (such as apps that modify a string numerous times in a loop), modifying a string repeatedly can exact a significant performance penalty. La alternativa es usar StringBuilder, que es una clase de cadena modificable.The alternative is to use StringBuilder, which is a mutable string class. Mutabilidad significa que una vez creada una instancia de la clase, puede modificar por anexar, quitar, reemplazar o inserción de caracteres.Mutability means that once an instance of the class has been created, it can be modified by appending, removing, replacing, or inserting characters. Un StringBuilder objeto mantiene un búfer para dar cabida a las expansiones en la cadena.A StringBuilder object maintains a buffer to accommodate expansions to the string. Nuevos datos se anexan al búfer si hay espacio disponible; en caso contrario, se asigna un búfer nuevo y mayor, se copian datos desde el búfer original para el nuevo búfer y, a continuación, se anexan los nuevos datos para el nuevo búfer.New data is appended to the buffer if room is available; otherwise, a new, larger buffer is allocated, data from the original buffer is copied to the new buffer, and the new data is then appended to the new buffer.

Importante

Aunque el StringBuilder clase por lo general ofrece un rendimiento mejor que la String (clase), debe no reemplazar automáticamente String con StringBuilder siempre que desee para manipular las cadenas.Although the StringBuilder class generally offers better performance than the String class, you should not automatically replace String with StringBuilder whenever you want to manipulate strings. Rendimiento depende del tamaño de la cadena, la cantidad de memoria que se va a asignar para la nueva cadena, el sistema en que se ejecuta la aplicación y el tipo de operación.Performance depends on the size of the string, the amount of memory to be allocated for the new string, the system on which your app is executing, and the type of operation. Debe estar preparado para probar la aplicación para determinar si StringBuilder realmente ofrece una mejora considerable del rendimiento.You should be prepared to test your app to determine whether StringBuilder actually offers a significant performance improvement.

Considere el uso de la String clase bajo estas condiciones:Consider using the String class under these conditions:

  • Cuando el número de cambios que hará que la aplicación en una cadena es pequeño.When the number of changes that your app will make to a string is small. En estos casos, StringBuilder podría oferta insignificante o ninguna mejora de rendimiento a través de String.In these cases, StringBuilder might offer negligible or no performance improvement over String.

  • Cuando se realiza un número fijo de operaciones de concatenación, especialmente con literales de cadena.When you are performing a fixed number of concatenation operations, particularly with string literals. En este caso, el compilador puede combinar las operaciones de concatenación en una sola operación.In this case, the compiler might combine the concatenation operations into a single operation.

  • Cuando tenga que realizar operaciones de búsqueda mientras se crea la cadena.When you have to perform extensive search operations while you are building your string. El StringBuilder carece de clase, como métodos de búsqueda IndexOf o StartsWith.The StringBuilder class lacks search methods such as IndexOf or StartsWith. Debe convertir el StringBuilder objeto a un String para estas operaciones y esto pueden invalidar las ventajas de rendimiento de uso StringBuilder.You'll have to convert the StringBuilder object to a String for these operations, and this can negate the performance benefit from using StringBuilder. Para obtener más información, consulte el buscar el texto en un objeto StringBuilder sección.For more information, see the Searching the text in a StringBuilder object section.

Considere el uso de la StringBuilder clase bajo estas condiciones:Consider using the StringBuilder class under these conditions:

  • Cuando se espera la aplicación para realizar un número desconocido de cambios en una cadena en tiempo de diseño (por ejemplo, cuando se usa un bucle para concatenar un número aleatorio de cadenas que contienen entradas de usuario).When you expect your app to make an unknown number of changes to a string at design time (for example, when you are using a loop to concatenate a random number of strings that contain user input).

  • Cuando se espera la aplicación para realizar un número significativo de los cambios en una cadena.When you expect your app to make a significant number of changes to a string.

Cómo funciona StringBuilderHow StringBuilder works

El StringBuilder.Length propiedad indica el número de caracteres del StringBuilder actualmente contiene el objeto.The StringBuilder.Length property indicates the number of characters the StringBuilder object currently contains. Si se agregan caracteres a la StringBuilder objeto, su longitud se incrementa siempre que sea igual que el tamaño de la StringBuilder.Capacity propiedad, que define el número de caracteres que puede contener el objeto.If you add characters to the StringBuilder object, its length increases until it equals the size of the StringBuilder.Capacity property, which defines the number of characters that the object can contain. Si el número de caracteres agregados hace que la longitud de la StringBuilder objeto supere su capacidad actual, la nueva memoria se asigna el valor de la Capacity se duplica la propiedad, se agregan nuevos caracteres a la StringBuilder objeto y su Lengthse ajusta la propiedad.If the number of added characters causes the length of the StringBuilder object to exceed its current capacity, new memory is allocated, the value of the Capacity property is doubled, new characters are added to the StringBuilder object, and its Length property is adjusted. Memoria adicional para el StringBuilder objeto se asigna dinámicamente hasta que alcanza el valor definido por el StringBuilder.MaxCapacity propiedad.Additional memory for the StringBuilder object is allocated dynamically until it reaches the value defined by the StringBuilder.MaxCapacity property. Cuando se alcanza la capacidad máxima, no se puede asignar ninguna memoria adicional para el StringBuilder objeto y al intentar agregar caracteres o se expande más allá de su capacidad máxima inicia ya sea un ArgumentOutOfRangeException o un OutOfMemoryException excepción.When the maximum capacity is reached, no further memory can be allocated for the StringBuilder object, and trying to add characters or expand it beyond its maximum capacity throws either an ArgumentOutOfRangeException or an OutOfMemoryException exception.

El ejemplo siguiente se muestra cómo un StringBuilder objeto asigna memoria nueva y aumenta su capacidad dinámicamente a medida se expande la cadena asignada al objeto.The following example illustrates how a StringBuilder object allocates new memory and increases its capacity dynamically as the string assigned to the object expands. El código crea un StringBuilder objeto mediante una llamada a su constructor (sin parámetros) predeterminado.The code creates a StringBuilder object by calling its default (parameterless) constructor. La capacidad predeterminada de este objeto es 16 caracteres y su capacidad máxima es de más de 2 millones de caracteres.The default capacity of this object is 16 characters, and its maximum capacity is more than 2 billion characters. Anexar la cadena "Es una frase".Appending the string "This is a sentence." da como resultado una nueva asignación de memoria porque la longitud de cadena (19 caracteres) supera la capacidad predeterminada de la StringBuilder objeto.results in a new memory allocation because the string length (19 characters) exceeds the default capacity of the StringBuilder object. Duplica la capacidad del objeto y 32 caracteres, se agrega la nueva cadena y la longitud del objeto ahora es igual a 19 caracteres.The capacity of the object doubles to 32 characters, the new string is added, and the length of the object now equals 19 characters. El código, a continuación, anexa la cadena "Es una frase adicional".The code then appends the string "This is an additional sentence." en el valor de la StringBuilder objeto 11 veces.to the value of the StringBuilder object 11 times. Cada vez que la operación de anexado hace que la longitud de la StringBuilder objeto supere su capacidad, su capacidad existente se duplica y Append operación se realiza correctamente.Whenever the append operation causes the length of the StringBuilder object to exceed its capacity, its existing capacity is doubled and the Append operation succeeds.

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
Imports System.Reflection
Imports System.Text

Module Example
   Public Sub Main()
      Dim sb As New StringBuilder()
      ShowSBInfo(sb)
      sb.Append("This is a sentence.")
      ShowSbInfo(sb)
      For ctr As Integer = 0 To 10
         sb.Append("This is an additional sentence.")
         ShowSbInfo(sb)
      Next   
   End Sub
   
   Public Sub ShowSBInfo(sb As StringBuilder)
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' 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

Asignación de memoriaMemory allocation

La capacidad predeterminada de un StringBuilder objeto es 16 caracteres y su capacidad máxima del valor predeterminado es Int32.MaxValue.The default capacity of a StringBuilder object is 16 characters, and its default maximum capacity is Int32.MaxValue. Estos valores predeterminados se utilizan si se llama a la StringBuilder() y StringBuilder(String) constructores.These default values are used if you call the StringBuilder() and StringBuilder(String) constructors.

Puede definir explícitamente la capacidad inicial de un StringBuilder objeto de las maneras siguientes:You can explicitly define the initial capacity of a StringBuilder object in the following ways:

  • Al llamar a cualquiera de los StringBuilder constructores que incluye un capacity parámetro cuando se crea el objeto.By calling any of the StringBuilder constructors that includes a capacity parameter when you create the object.

  • Asignando explícitamente un valor nuevo a la StringBuilder.Capacity propiedad para expandir una existente StringBuilder objeto.By explicitly assigning a new value to the StringBuilder.Capacity property to expand an existing StringBuilder object. Tenga en cuenta que la propiedad produce una excepción si la nueva capacidad sea menor que el existente capacidad o mayor que el StringBuilder capacidad máxima del objeto.Note that the property throws an exception if the new capacity is less than the existing capacity or greater than the StringBuilder object's maximum capacity.

  • Mediante una llamada a la StringBuilder.EnsureCapacity método con la nueva capacidad.By calling the StringBuilder.EnsureCapacity method with the new capacity. La nueva capacidad no debe ser mayor que el StringBuilder capacidad máxima del objeto.The new capacity must not be greater than the StringBuilder object's maximum capacity. Sin embargo, a diferencia de una asignación a la Capacity propiedad EnsureCapacity no produce una excepción si la nueva capacidad deseada es menor que la capacidad existente; en este caso, la llamada al método no tiene ningún efecto.However, unlike an assignment to the Capacity property, EnsureCapacity does not throw an exception if the desired new capacity is less than the existing capacity; in this case, the method call has no effect.

Si la longitud de la cadena asignada a la StringBuilder objeto en la llamada al constructor supera la capacidad predeterminada o la capacidad especificada, el Capacity propiedad está establecida en la longitud de la cadena especificada con el value parámetro.If the length of the string assigned to the StringBuilder object in the constructor call exceeds either the default capacity or the specified capacity, the Capacity property is set to the length of the string specified with the value parameter.

Puede definir explícitamente la capacidad máxima de un StringBuilder objeto mediante una llamada a la StringBuilder(Int32, Int32) constructor.You can explicitly define the maximum capacity of a StringBuilder object by calling the StringBuilder(Int32, Int32) constructor. No se puede cambiar la capacidad máxima, se asigna un nuevo valor para el MaxCapacity propiedad, porque es de solo lectura.You can't change the maximum capacity by assigning a new value to the MaxCapacity property, because it is read-only.

La sección anterior se muestra, siempre que la capacidad existente es inadecuado, más memoria se asigna y la capacidad de un StringBuilder objeto dobles hasta el valor definido por el MaxCapacity propiedad.As the previous section shows, whenever the existing capacity is inadequate, additional memory is allocated and the capacity of a StringBuilder object doubles up to the value defined by the MaxCapacity property.

En general, la capacidad predeterminada y la capacidad máxima son adecuados para la mayoría de las aplicaciones.In general, the default capacity and maximum capacity are adequate for most apps. Considere la posibilidad de establecer estos valores en las siguientes condiciones:You might consider setting these values under the following conditions:

  • Si el tamaño final de la StringBuilder objeto es probable que crezcan extremadamente grande, normalmente por encima de varios megabytes.If the eventual size of the StringBuilder object is likely to grow exceedingly large, typically in excess of several megabytes. En este caso, puede haber algunas ventajas de rendimiento desde la configuración inicial Capacity propiedad en un valor alto significativamente para eliminar la necesidad de demasiados reasignaciones de memoria.In this case, there may be some performance benefit from setting the initial Capacity property to a significantly high value to eliminate the need for too many memory reallocations.

  • Si la aplicación se ejecuta en un sistema con memoria limitada.If your app is running on a system with limited memory. En este caso, puede desear considerar la configuración del MaxCapacity propiedad a menos de Int32.MaxValue si la aplicación está controlando las cadenas de gran tamaño que pueden provocar que se ejecutan en un entorno con restricciones de memoria.In this case, you may want to consider setting the MaxCapacity property to less than Int32.MaxValue if your app is handling large strings that may cause it to execute in a memory-constrained environment.

Instancias de un objeto StringBuilderInstantiating a StringBuilder object

Crea instancias de un StringBuilder objeto llamando a uno de sus seis constructores de clase sobrecargados, que se enumeran en la tabla siguiente.You instantiate a StringBuilder object by calling one of its six overloaded class constructors, which are listed in the following table. Crear tres de los constructores de instancias de un StringBuilder objeto cuyo valor es una cadena vacía, pero establecer su Capacity y MaxCapacity valores de forma diferente.Three of the constructors instantiate a StringBuilder object whose value is an empty string, but set its Capacity and MaxCapacity values differently. Definen los tres constructores restantes un StringBuilder objeto que tiene un valor de cadena específico y la capacidad.The remaining three constructors define a StringBuilder object that has a specific string value and capacity. Dos de los tres constructores usan la capacidad máxima predeterminada de Int32.MaxValue, mientras que la tercera le permite establecer la capacidad máxima.Two of the three constructors use the default maximum capacity of Int32.MaxValue, whereas the third allows you to set the maximum capacity.

ConstructorConstructor Valor de cadenaString value CapacidadCapacity Capacidad máximaMaximum capacity
StringBuilder() String.Empty 1616 Int32.MaxValue
StringBuilder(Int32) String.Empty Definido por el capacity parámetroDefined by the capacity parameter Int32.MaxValue
StringBuilder(Int32, Int32) String.Empty Definido por el capacity parámetroDefined by the capacity parameter Definido por el maxCapacity parámetroDefined by the maxCapacity parameter
StringBuilder(String) Definido por el value parámetroDefined by the value parameter 16 o value.16 or value. Length, lo que sea mayorLength, whichever is greater Int32.MaxValue
StringBuilder(String, Int32) Definido por el value parámetroDefined by the value parameter Definido por el capacity parámetro o value.Defined by the capacity parameter or value. Length, lo que sea mayor.Length, whichever is greater. Int32.MaxValue
StringBuilder(String, Int32, Int32, Int32) Definido por value.Defined by value. Substring(startIndex, length)Substring(startIndex, length) Definido por el capacity parámetro o value.Defined by the capacity parameter or value. Length, lo que sea mayor.Length, whichever is greater. Definido por el maxCapacity parámetroDefined by the maxCapacity parameter

En el siguiente ejemplo usa tres de estas sobrecargas de constructor para crear instancias StringBuilder objetos.The following example uses three of these constructor overloads to instantiate StringBuilder objects.

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
Imports System.Text

Module Example
   Public Sub Main()
      Dim value As String = "An ordinary string"
      Dim index As Integer = value.IndexOf("An ") + 3
      Dim capacity As Integer = &hFFFF
      
      ' Instantiate a StringBuilder from a string.
      Dim sb1 As New StringBuilder(value)
      ShowSBInfo(sb1) 
      
      ' Instantiate a StringBuilder from string and define a capacity.  
      Dim sb2 As New StringBuilder(value, capacity)   
      ShowSBInfo(sb2) 
      
      ' Instantiate a StringBuilder from substring and define a capacity.  
      Dim sb3 As New StringBuilder(value, index, 
                                   value.Length - index, 
                                   capacity )
      ShowSBInfo(sb3) 
   End Sub
   
   Public Sub ShowSBInfo(sb As StringBuilder)
      Console.WriteLine()
      Console.WriteLine("Value: {0}", sb.ToString())
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' 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

Llamar a métodos de StringBuilderCalling StringBuilder methods

La mayoría de los métodos que modifican la cadena en un StringBuilder instancia devuelven una referencia a esa misma instancia.Most of the methods that modify the string in a StringBuilder instance return a reference to that same instance. Esto le permite llamar a StringBuilder métodos de dos maneras:This enables you to call StringBuilder methods in two ways:

  • Puede realizar llamadas a métodos individuales y omitir el valor devuelto, como el siguiente ejemplo.You can make individual method calls and ignore the return value, as the following example does.

    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.
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim sb As 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())
       End Sub
    End Module
    ' The example displays the following output:
    '       This is a complete sentence.
    
  • Puede realizar una serie de llamadas de método en una sola instrucción.You can make a series of method calls in a single statement. Esto puede ser conveniente si desea escribir una sola instrucción que se vincula operaciones sucesivas.This can be convenient if you want to write a single statement that chains successive operations. El ejemplo siguiente consolida tres llamadas de método del ejemplo anterior en una sola línea de código.The following example consolidates three method calls from the previous example into a single line of 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.
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim sb As 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())
       End Sub
    End Module
    ' The example displays the following output:
    '       This is a complete sentence.
    

Realización de operaciones de StringBuilderPerforming StringBuilder operations

Puede usar los métodos de la StringBuilder clase para recorrer en iteración, agregar, eliminar o modificar los caracteres de un StringBuilder objeto.You can use the methods of the StringBuilder class to iterate, add, delete, or modify characters in a StringBuilder object.

Recorrer en iteración los caracteres de StringBuilderIterating StringBuilder characters

Puede tener acceso a los caracteres de un StringBuilder objeto utilizando el StringBuilder.Chars[Int32] propiedad.You can access the characters in a StringBuilder object by using the StringBuilder.Chars[Int32] property. En C#, Chars[Int32] es un indizador; en Visual Basic, es la propiedad predeterminada de la StringBuilder clase.In C#, Chars[Int32] is an indexer; in Visual Basic, it is the default property of the StringBuilder class. Esto le permite establecer o recuperar los caracteres individuales utilizando su índice solo, sin hacer referencia explícita a la Chars[Int32] propiedad.This enables you to set or retrieve individual characters by using their index only, without explicitly referencing the Chars[Int32] property. Los caracteres de un StringBuilder objeto comienzan en el índice 0 (cero) y continuar indizar Length - 1.Characters in a StringBuilder object begin at index 0 (zero) and continue to index Length - 1.

El ejemplo siguiente ilustra la Chars[Int32] propiedad.The following example illustrates the Chars[Int32] property. Anexa diez números aleatorios a una StringBuilder de objetos y, a continuación, recorre en iteración cada carácter.It appends ten random numbers to a StringBuilder object, and then iterates each character. Si es la categoría del carácter Unicode UnicodeCategory.DecimalDigitNumber, disminuye la cantidad en 1 (o cambia el número a 9 si su valor es 0).If the character's Unicode category is UnicodeCategory.DecimalDigitNumber, it decreases the number by 1 (or changes the number to 9 if its value is 0). En el ejemplo se muestra el contenido de la StringBuilder objeto ambos antes y después de que se han cambiado los valores de caracteres individuales.The example displays the contents of the StringBuilder object both before and after the values of individual characters were changed.

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
Imports System.Globalization
Imports System.Text

Module Example
   Public Sub Main()
      Dim rnd As New Random()
      Dim sb As New StringBuilder()
      
      ' Generate 10 random numbers and store them in a StringBuilder.
      For ctr As Integer = 0 To 9
         sb.Append(rnd.Next().ToString("N5"))    
      Next
      Console.WriteLine("The original string:")
      Console.WriteLine(sb.ToString())
      Console.WriteLine()
            
      ' Decrease each number by one.
      For ctr As Integer = 0 To sb.Length - 1
         If Char.GetUnicodeCategory(sb(ctr)) = UnicodeCategory.DecimalDigitNumber Then
            Dim number As Integer = CType(Char.GetNumericValue(sb(ctr)), Integer)
            number -= 1
            If number < 0 Then number = 9
         
            sb(ctr) = number.ToString()(0)
         End If
      Next
      Console.WriteLine("The new string:")
      Console.WriteLine(sb.ToString())
   End Sub
End Module
' 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

El uso de la indexación basada en caracteres con la propiedad Chars[Int32] puede ser muy lento en las condiciones siguientes:Using character-based indexing with the Chars[Int32] property can be extremely slow under the following conditions:

El rendimiento se ve seriamente afectado ya que cada acceso de carácter recorre toda la lista vinculada de fragmentos para buscar el búfer correcto en el que indexar.Performance is severely impacted because each character access walks the entire linked list of chunks to find the correct buffer to index into.

Nota

Incluso para un gran objeto StringBuilder pesado, el uso de la propiedad Chars[Int32] para el acceso basado en índice a uno o un número reducido de caracteres tiene un efecto insignificante en el rendimiento; por lo general, es una operación 0(n).Even for a large "chunky" StringBuilder object, using the Chars[Int32] property for index-based access to one or a small number of characters has a negligible performance impact; typically, it is an 0(n) operation. El impacto significativo en el rendimiento se produce al recorrer en iteración los caracteres del objeto StringBuilder, una operación O(n^2).The significant performance impact occurs when iterating the characters in the StringBuilder object, which is an O(n^2) operation.

Si encuentra problemas de rendimiento al usar la indexación basada en caracteres con objetos StringBuilder, puede usar cualquiera de las soluciones alternativas siguientes:If you encounter performance issues when using character-based indexing with StringBuilder objects, you can use any of the following workarounds:

  • Convertir la instancia de StringBuilder en una String mediante una llamada al método ToString y después obtener acceso a los caracteres de la cadena.Convert the StringBuilder instance to a String by calling the ToString method, then access the characters in the string.

  • Copiar el contenido del objeto StringBuilder existente en un objeto StringBuilder nuevo de tamaño predefinido.Copy the contents of the existing StringBuilder object to a new pre-sized StringBuilder object. El rendimiento mejora porque el objeto StringBuilder nuevo no es pesado.Performance improves because the new StringBuilder object is not chunky. Por ejemplo:For example:

    // sbOriginal is the existing StringBuilder object
    var sbNew = new StringBuilder(sbOriginal.ToString(), sbOriginal.Length);
    
    ' sbOriginal is the existing StringBuilder object
    Dim sbNew = New StringBuilder(sbOriginal.ToString(), sbOriginal.Length)
    
  • Establezca la capacidad inicial del objeto StringBuilder en un valor que sea aproximadamente igual a su tamaño máximo esperado mediante una llamada al constructor StringBuilder(Int32).Set the initial capacity of the StringBuilder object to a value that is approximately equal to its maximum expected size by calling the StringBuilder(Int32) constructor. Tenga en cuenta que esto asigna el bloque completo de memoria aunque StringBuilder rara vez alcanza su capacidad máxima.Note that this allocates the entire block of memory even if the StringBuilder rarely reaches its maximum capacity.

Agregar texto a un objeto StringBuilderAdding text to a StringBuilder object

El StringBuilder clase incluye los siguientes métodos para expandir el contenido de un StringBuilder objeto:The StringBuilder class includes the following methods for expanding the contents of a StringBuilder object:

  • El Append método anexa una cadena, una subcadena, una matriz de caracteres, una parte de una matriz de caracteres, un carácter único se repite varias veces, o tipo de representación de cadena de datos primitivos por un StringBuilder objeto.The Append method appends a string, a substring, a character array, a portion of a character array, a single character repeated multiple times, or the string representation of a primitive data type to a StringBuilder object.

  • El AppendLine método anexa un terminador de línea o una cadena junto con un terminador de línea en un StringBuilder objeto.The AppendLine method appends a line terminator or a string along with a line terminator to a StringBuilder object.

  • El AppendFormat método anexa una a una StringBuilder objeto.The AppendFormat method appends a to a StringBuilder object. Las representaciones de cadena de objetos incluidos en la cadena de resultado pueden reflejar las convenciones de formato de la referencia cultural actual del sistema o una referencia cultural especificada.The string representations of objects included in the result string can reflect the formatting conventions of the current system culture or a specified culture.

  • El Insert método inserta una cadena, una subcadena, varias repeticiones de una cadena, una matriz de caracteres, una parte de una matriz de caracteres o la representación de cadena de datos primitivos que se escriba en una posición especificada en el StringBuilder objeto.The Insert method inserts a string, a substring, multiple repetitions of a string, a character array, a portion of a character array, or the string representation of a primitive data type at a specified position in the StringBuilder object. La posición se define mediante un índice de base cero.The position is defined by a zero-based index.

En el ejemplo siguiente se usa el Append, AppendLine, AppendFormat, y Insert métodos para expandir el texto de un StringBuilder objeto.The following example uses the Append, AppendLine, AppendFormat, and Insert methods to expand the text of a StringBuilder object.

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            <
Imports System.Text

Module Example
   Public Sub Main()
      ' Create a StringBuilder object with no text.
      Dim sb As New StringBuilder()
      ' Append some text.
      sb.Append("*"c, 10).Append(" Adding Text to a StringBuilder Object ").Append("*"c, 10)
      sb.AppendLine()
      sb.AppendLine()
      sb.AppendLine("Some code points and their corresponding characters:")
      ' Append some formatted text.
      For ctr = 50 To 60
         sb.AppendFormat("{0,12:X4} {1,12}", ctr, Convert.ToChar(ctr))
         sb.AppendLine()
      Next
      ' Find the end of the introduction to the column.
      Dim pos As Integer = 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", vbCrLf))      

      ' Convert the StringBuilder to a string and display it.      
      Console.WriteLine(sb.ToString())      
   End Sub
End Module
' 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            <

Eliminación de texto de un objeto StringBuilderDeleting text from a StringBuilder object

El StringBuilder clase incluye métodos que pueden reducir el tamaño del elemento actual StringBuilder instancia.The StringBuilder class includes methods that can reduce the size of the current StringBuilder instance. El Clear método quita todos los caracteres y establece el Length propiedad en cero.The Clear method removes all characters and sets the Length property to zero. El Remove método elimina un número especificado de caracteres a partir de una posición de índice determinada.The Remove method deletes a specified number of characters starting at a particular index position. Además, puede quitar los caracteres del final de un StringBuilder objeto estableciendo sus Length propiedad con un valor que es menor que la longitud de la instancia actual.In addition, you can remove characters from the end of a StringBuilder object by setting its Length property to a value that is less than the length of the current instance.

En el ejemplo siguiente se quita alguna parte del texto de un StringBuilder objeto, muestra su capacidad resultante, capacidad máxima y los valores de propiedad de longitud y, a continuación, llama a la Clear método para quitar todos los caracteres desde la StringBuilder objeto.The following example removes some of the text from a StringBuilder object, displays its resulting capacity, maximum capacity, and length property values, and then calls the Clear method to remove all the characters from the StringBuilder object.

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
Imports System.Text

Module Example
   Public Sub Main()
      Dim sb As New StringBuilder("A StringBuilder object")
      ShowSBInfo(sb)
      ' Remove "object" from the text.
      Dim textToRemove As String = "object"
      Dim pos As Integer = sb.ToString().IndexOf(textToRemove)
      If pos >= 0
         sb.Remove(pos, textToRemove.Length)
         ShowSBInfo(sb)
      End If
      ' Clear the StringBuilder contents.
      sb.Clear()
      ShowSBInfo(sb)   
   End Sub

   Public Sub ShowSBInfo(sb As StringBuilder)
      Console.WriteLine()
      Console.WriteLine("Value: {0}", sb.ToString())
      For Each prop In sb.GetType().GetProperties
         If prop.GetIndexParameters().Length = 0 Then
            Console.Write("{0}: {1:N0}    ", prop.Name, prop.GetValue(sb))
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' 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

Modificar el texto en un objeto StringBuilderModifying the text in a StringBuilder object

El StringBuilder.Replace método reemplaza todas las apariciones de un carácter o una cadena en todo el StringBuilder objeto o en un intervalo de caracteres determinada.The StringBuilder.Replace method replaces all occurrences of a character or a string in the entire StringBuilder object or in a particular character range. En el ejemplo siguiente se usa el Replace método para reemplazar todos los signos de exclamación (!) con signos de interrogación (?) en el StringBuilder objeto.The following example uses the Replace method to replace all exclamation points (!) with question marks (?) in the StringBuilder object.

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?
Imports System.Text

Module Example
   Public Sub Main()
      Dim MyStringBuilder As New StringBuilder("Hello World!")
      MyStringBuilder.Replace("!"c, "?"c)
      Console.WriteLine(MyStringBuilder)
   End Sub
End Module
' The example displays the following output:
'       Hello World?

Buscar el texto en un objeto StringBuilderSearching the text in a StringBuilder object

El StringBuilder clase no incluye métodos similares a los String.Contains, String.IndexOf, y String.StartsWith métodos proporcionados por el String (clase), que le permiten buscar el objeto para un determinado carácter o una subcadena.The StringBuilder class does not include methods similar to the String.Contains, String.IndexOf, and String.StartsWith methods provided by the String class, which allow you to search the object for a particular character or a substring. Determinar la presencia o la posición de carácter de una subcadena inicial requiere que buscar un String valor mediante un método de búsqueda de cadena o un método de expresión regular.Determining the presence or starting character position of a substring requires that you search a String value by using either a string search method or a regular expression method. Hay cuatro maneras de implementar dichas búsquedas, como se muestra en la tabla siguiente.There are four ways to implement such searches, as the following table shows.

TécnicaTechnique ProfesionalesPros DesventajasCons
Buscar valores de cadena antes de agregarlos a la StringBuilder objeto.Search string values before adding them to the StringBuilder object. Es útil para determinar si existe una subcadena.Useful for determining whether a substring exists. No se puede usar cuando la posición de índice de una subcadena es importante.Cannot be used when the index position of a substring is important.
Llame a ToString y buscar el valor devuelto String objeto.Call ToString and search the returned String object. Fácil de usar si se asigna a todo el texto a un StringBuilder de objetos y, a continuación, comience a modificarlo.Easy to use if you assign all the text to a StringBuilder object, and then begin to modify it. Complicado llamar repetidamente a ToString si debe realizar modificaciones antes de que todo el texto se agrega a la StringBuilder objeto.Cumbersome to repeatedly call ToString if you must make modifications before all text is added to the StringBuilder object.

Debe recordar al trabajar desde el final de la StringBuilder texto objeto si va a realizar cambios.You must remember to work from the end of the StringBuilder object's text if you're making changes.
Use el Chars[Int32] propiedad para buscar un intervalo de caracteres de forma secuencial.Use the Chars[Int32] property to sequentially search a range of characters. Resulta útil si desea realizar con los caracteres individuales o una subcadena pequeño.Useful if you're concerned with individual characters or a small substring. Complicado si el número de caracteres que se va a buscar es grande o si la lógica de búsqueda es compleja.Cumbersome if the number of characters to search is large or if the search logic is complex.

Tiene como resultado un rendimiento muy deficiente para los objetos que han crecido muy grandes a través de llamadas de método repetidas.Results in very poor performance for objects that have grown very large through repeated method calls.
Convertir el StringBuilder objeto a un String de objetos y realizar modificaciones en el String objeto.Convert the StringBuilder object to a String object, and perform modifications on the String object. Resulta útil si el número de modificaciones es pequeño.Useful if the number of modifications is small. Niega la ventaja de rendimiento de la StringBuilder clase si la cantidad de modificaciones es grande.Negates the performance benefit of the StringBuilder class if the number of modifications is large.

Vamos a examinar estas técnicas con mayor detalle.Let's examine these techniques in greater detail.

  • Si el objetivo de la búsqueda es determinar si una subcadena determinada existe (es decir, si no está interesado en la posición de la subcadena), puede buscar cadenas antes de almacenarlos en el StringBuilder objeto.If the goal of the search is to determine whether a particular substring exists (that is, if you aren't interested in the position of the substring), you can search strings before storing them in the StringBuilder object. El ejemplo siguiente proporciona una implementación posible.The following example provides one possible implementation. Define un StringBuilderFinder clase cuyo constructor se pasa una referencia a un StringBuilder objeto y la subcadena que se va a buscar en la cadena.It defines a StringBuilderFinder class whose constructor is passed a reference to a StringBuilder object and the substring to find in the string. En este caso, el ejemplo intenta determinar si las temperaturas grabadas en grados Fahrenheit o Celsius y agrega el texto introductorio adecuado al principio de la StringBuilder objeto.In this case, the example tries to determine whether recorded temperatures are in Fahrenheit or Celsius, and adds the appropriate introductory text to the beginning of the StringBuilder object. Un generador de números aleatorios se utiliza para seleccionar una matriz que contiene los datos en grados centígrados o grados Fahrenheit.A random number generator is used to select an array that contains data in either degrees Celsius or degrees 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
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim rnd As New Random()
          Dim tempF() As String = { "47.6F", "51.3F", "49.5F", "62.3F" }
          Dim tempC() As String = { "21.2C", "16.1C", "23.5C", "22.9C" }
          Dim temps()() As String = { tempF, tempC } 
    
          Dim sb As StringBuilder = New StringBuilder()
          Dim f As New StringBuilderFinder(sb, "F")
          Dim baseDate As New DateTime(2013, 5, 1) 
          Dim temperatures() As String = temps(rnd.Next(2))
          Dim isFahrenheit As Boolean = False
          For Each temperature In temperatures
             If isFahrenheit Then
                sb.AppendFormat("{0:d}: {1}{2}", baseDate, temperature, vbCrLf)
             Else
                isFahrenheit = f.SearchAndAppend(String.Format("{0:d}: {1}{2}", 
                                                 baseDate, temperature, vbCrLf))
             End If
             baseDate = baseDate.AddDays(1)
          Next            
          If isFahrenheit Then
             sb.Insert(0, "Average Daily Temperature in Degrees Fahrenheit")
             sb.Insert(47, vbCrLf + vbCrLf)
          Else
             sb.Insert(0, "Average Daily Temperature in Degrees Celsius")
             sb.Insert(44, vbCrLf + vbCrLf)
          End If   
          Console.WriteLine(sb.ToString())
       End Sub
    End Module
    
    Public Class StringBuilderFinder
       Private sb As StringBuilder
       Private text As String
       
       Public Sub New(sb As StringBuilder, textToFind As String)
          Me.sb = sb
          text = textToFind
       End Sub
       
       Public Function SearchAndAppend(stringToSearch As String) As Boolean
          sb.Append(stringToSearch)
          Return stringToSearch.Contains(text)
       End Function
    End Class
    ' 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
    
  • Llame a la StringBuilder.ToString método para convertir el StringBuilder objeto a un String objeto.Call the StringBuilder.ToString method to convert the StringBuilder object to a String object. Puede buscar la cadena con métodos como String.LastIndexOf o String.StartsWith, o bien puede usar expresiones regulares y la Regex clase para buscar patrones.You can search the string by using methods such as String.LastIndexOf or String.StartsWith, or you can use regular expressions and the Regex class to search for patterns. Dado que ambos StringBuilder y String objetos utilizan la codificación para almacenar caracteres, las posiciones de índice de caracteres, subcadenas, UTF-16 y coincidencias de expresiones regulares son iguales en ambos objetos.Because both StringBuilder and String objects use UTF-16 encoding to store characters, the index positions of characters, substrings, and regular expression matches are the same in both objects. Esto le permite usar StringBuilder métodos para realizar cambios en la misma posición en el que se encuentra ese texto en el String objeto.This enables you to use StringBuilder methods to make changes at the same position at which that text is found in the String object.

    Nota

    Si adopta este enfoque, debe trabajar desde el final de la StringBuilder objeto en sus comienzos para que no tiene que convertir repetidamente el StringBuilder objeto en una cadena.If you adopt this approach, you should work from the end of the StringBuilder object to its beginning so that you don't have to repeatedly convert the StringBuilder object to a string.

    En el ejemplo siguiente se muestra este enfoque.The following example illustrates this approach. Almacena las cuatro repeticiones de cada letra del alfabeto inglés en un StringBuilder objeto.It stores four occurrences of each letter of the English alphabet in a StringBuilder object. A continuación, convierte el texto a un String de objetos y usa una expresión regular para identificar la posición inicial de cada secuencia de cuatro caracteres.It then converts the text to a String object and uses a regular expression to identify the starting position of each four-character sequence. Por último, se agrega un carácter de subrayado antes de cada secuencia de cuatro caracteres, excepto la primera secuencia y convierte el primer carácter de la secuencia de letras en mayúsculas.Finally, it adds an underscore before each four-character sequence except for the first sequence, and converts the first character of the sequence to uppercase.

    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
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Create a parallel string object.
          Dim sbString As String = sb.ToString()
          ' Determine where each new character sequence begins.
          Dim pattern As String = "(\w)\1+"
          Dim matches As MatchCollection = Regex.Matches(sbString, pattern)
    
          ' Uppercase the first occurrence of the sequence, and separate it
          ' from the previous sequence by an underscore character.
          For ctr As Integer = matches.Count - 1 To 0 Step -1 
             Dim m As Match = matches(ctr)
             sb.Chars(m.Index) = Char.ToUpper(sb.Chars(m.index))
             If m.Index > 0 Then sb.Insert(m.Index, "_")
          Next
          ' Display the resulting string.
          sbString = sb.ToString()
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' 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
    
  • Use la StringBuilder.Chars[Int32] propiedad que se va a buscar secuencialmente en un intervalo de caracteres en un StringBuilder objeto.Use the StringBuilder.Chars[Int32] property to sequentially search a range of characters in a StringBuilder object. Este enfoque puede no resultar práctico si el número de caracteres que se va a buscar es grande o la lógica de búsqueda es especialmente compleja.This approach may not be practical if the number of characters to be searched is large or the search logic is particularly complex. Para las implicaciones de rendimiento de acceso basado en índice de carácter a carácter para muy grandes, chunked StringBuilder objetos, consulte la documentación de la StringBuilder.Chars[Int32] propiedad.For the performance implications of character-by-character index-based access for very large, chunked StringBuilder objects, see the documentation for the StringBuilder.Chars[Int32] property.

    En el ejemplo siguiente es idéntico en funcionalidad al ejemplo anterior, pero difiere de la implementación.The following example is identical in functionality to the previous example but differs in implementation. Usa el Chars[Int32] propiedad para detectar cuándo cambia un valor de carácter, inserta un carácter de subrayado en esa posición y convierte el primer carácter en la nueva secuencia a mayúsculas.It uses the Chars[Int32] property to detect when a character value has changed, inserts an underscore at that position, and converts the first character in the new sequence to uppercase.

    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
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Iterate the text to determine when a new character sequence occurs.
          Dim position As Integer = 0
          Dim current As Char = ChrW(0)
          Do
             If sb(position) <> current Then
                current = sb(position)
                sb(position) = Char.ToUpper(sb(position))
                If position > 0 Then sb.Insert(position, "_")
                position += 2
             Else
                position += 1
             End If      
          Loop While position <= sb.Length - 1
          ' Display the resulting string.
          Dim sbString As String = sb.ToString()
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' 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
    
  • Store todo el texto sin modificar en el StringBuilder de objeto, llame a la StringBuilder.ToString método para convertir el StringBuilder objeto a un String de objetos y realizar las modificaciones en el String objeto.Store all the unmodified text in the StringBuilder object, call the StringBuilder.ToString method to convert the StringBuilder object to a String object, and perform the modifications on the String object. Puede usar este enfoque si tiene sólo unas pocas modificaciones; en caso contrario, el costo de trabajar con cadenas inmutable puede invalidar las ventajas de rendimiento de uso de un StringBuilder objeto.You can use this approach if you have only a few modifications; otherwise, the cost of working with immutable strings may negate the performance benefits of using a StringBuilder object.

    El ejemplo siguiente es idéntico en funcionalidad a los dos ejemplos anteriores, pero difiere de la implementación.The following example is identical in functionality to the previous two examples but differs in implementation. Crea un StringBuilder objeto, lo convierte en un String de objetos y, a continuación, utiliza una expresión regular para realizar todas las modificaciones restantes en la cadena.It creates a StringBuilder object, converts it to a String object, and then uses a regular expression to perform all remaining modifications on the string. El Regex.Replace(String, String, MatchEvaluator) método usa una expresión lambda para realizar el reemplazo de cada coincidencia.The Regex.Replace(String, String, MatchEvaluator) method uses a lambda expression to perform the replacement on each match.

    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
    
    Imports System.Text
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          ' Create a StringBuilder object with 4 successive occurrences 
          ' of each character in the English alphabet. 
          Dim sb As New StringBuilder()
          For ctr As UShort = AscW("a") To Ascw("z")
             sb.Append(ChrW(ctr), 4)
          Next    
          ' Convert it to a string.
          Dim sbString As String = sb.ToString()
    
          ' Use a regex to uppercase the first occurrence of the sequence, 
          ' and separate it from the previous sequence by an underscore.
          Dim pattern As String = "(\w)(\1+)"
          sbString = Regex.Replace(sbString, pattern, 
                                   Function(m) If(m.Index > 0,"_","") + 
                                               m.Groups(1).Value.ToUpper + 
                                               m.Groups(2).Value)
    
          ' Display the resulting string.
          Dim line As Integer = 0
          Do
             Dim nChars As Integer = If(line * 80 + 79 <= sbString.Length, 
                                        80, sbString.Length - line * 80)
             Console.WriteLine(sbString.Substring(line * 80, nChars))
             line += 1
          Loop While line * 80 < sbString.Length
       End Sub
    End Module
    ' 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
    

Convertir el objeto StringBuilder en stringConverting the StringBuilder object to a string

Debe convertir primero el objeto StringBuilder en un objeto String para poder pasar la cadena representada por el objeto StringBuilder a un método con un parámetro String o mostrarla en la interfaz de usuario.You must convert the StringBuilder object to a String object before you can pass the string represented by the StringBuilder object to a method that has a String parameter or display it in the user interface. Realizar esta conversión mediante una llamada a la StringBuilder.ToString método.You perform this conversion by calling the StringBuilder.ToString method. Para ver una ilustración, vea el ejemplo anterior, que llama a la ToString método para convertir un StringBuilder objeto en una cadena para que se puede pasar a un método de expresión regular.For an illustration, see the previous example, which calls the ToString method to convert a StringBuilder object to a string so that it can be passed to a regular expression method.

Notas a los autores de las llamadas

En .NET Core y en el .NET Framework 4.0 y versiones posteriores, al crear instancias de la StringBuilder objeto mediante una llamada a la StringBuilder(Int32, Int32) constructor, la longitud y la capacidad de la StringBuilder instancia puede crecer más allá del valor de su MaxCapacity propiedad.In .NET Core and in the .NET Framework 4.0 and later versions, when you instantiate the StringBuilder object by calling the StringBuilder(Int32, Int32) constructor, both the length and the capacity of the StringBuilder instance can grow beyond the value of its MaxCapacity property. Esto puede ocurrir especialmente cuando se llama a la Append(String) y AppendFormat(String, Object) métodos para anexar cadenas pequeñas.This can occur particularly when you call the Append(String) and AppendFormat(String, Object) methods to append small strings.

Constructores

StringBuilder() StringBuilder() StringBuilder() StringBuilder()

Inicializa una nueva instancia de la clase StringBuilder.Initializes a new instance of the StringBuilder class.

StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32) StringBuilder(Int32)

Inicializa una nueva instancia de la clase StringBuilder con la capacidad especificada.Initializes a new instance of the StringBuilder class using the specified capacity.

StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32) StringBuilder(Int32, Int32)

Inicializa una nueva instancia de la clase StringBuilder que empieza con una capacidad concreta y puede aumentar hasta un máximo especificado.Initializes a new instance of the StringBuilder class that starts with a specified capacity and can grow to a specified maximum.

StringBuilder(String) StringBuilder(String) StringBuilder(String) StringBuilder(String)

Inicializa una nueva instancia de la clase StringBuilder con la cadena especificada.Initializes a new instance of the StringBuilder class using the specified string.

StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32) StringBuilder(String, Int32)

Inicializa una nueva instancia de la clase StringBuilder con la capacidad y la cadena especificadas.Initializes a new instance of the StringBuilder class using the specified string and capacity.

StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32) StringBuilder(String, Int32, Int32, Int32)

Inicializa una nueva instancia de la clase StringBuilder a partir de la subcadena y la capacidad especificadas.Initializes a new instance of the StringBuilder class from the specified substring and capacity.

Propiedades

Capacity Capacity Capacity Capacity

Obtiene o establece el número máximo de caracteres que puede contener la memoria asignada por la instancia en uso.Gets or sets the maximum number of characters that can be contained in the memory allocated by the current instance.

Chars[Int32] Chars[Int32] Chars[Int32] Chars[Int32]

Obtiene o establece el carácter en la posición de carácter especificada en la instancia.Gets or sets the character at the specified character position in this instance.

Length Length Length Length

Obtiene o establece la longitud del objeto StringBuilder actual.Gets or sets the length of the current StringBuilder object.

MaxCapacity MaxCapacity MaxCapacity MaxCapacity

Obtiene la capacidad máxima de la instancia.Gets the maximum capacity of this instance.

Métodos

Append(Boolean) Append(Boolean) Append(Boolean) Append(Boolean)

Anexa a esta instancia la representación en forma de cadena de un valor booleano especificado.Appends the string representation of a specified Boolean value to this instance.

Append(Byte) Append(Byte) Append(Byte) Append(Byte)

Anexa a esta instancia la representación en forma de cadena de un entero sin signo de 8 bits especificado.Appends the string representation of a specified 8-bit unsigned integer to this instance.

Append(Char) Append(Char) Append(Char) Append(Char)

Anexa a esta instancia la representación en forma de cadena de un objeto Char especificado.Appends the string representation of a specified Char object to this instance.

Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32) Append(Char*, Int32)

Anexa a esta instancia una matriz de caracteres Unicode a partir de una dirección especificada.Appends an array of Unicode characters starting at a specified address to this instance.

Append(Char, Int32) Append(Char, Int32) Append(Char, Int32) Append(Char, Int32)

Anexa a esta instancia un número especificado de copias de la representación en forma de cadena de un carácter Unicode.Appends a specified number of copies of the string representation of a Unicode character to this instance.

Append(Char[]) Append(Char[]) Append(Char[]) Append(Char[])

Anexa a esta instancia la representación en forma de cadena de los caracteres Unicode de una matriz especificada.Appends the string representation of the Unicode characters in a specified array to this instance.

Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32) Append(Char[], Int32, Int32)

Anexa a esta instancia la representación en forma de cadena de una submatriz de caracteres Unicode especificada.Appends the string representation of a specified subarray of Unicode characters to this instance.

Append(Decimal) Append(Decimal) Append(Decimal) Append(Decimal)

Anexa a esta instancia la representación en forma de cadena de un número decimal especificado.Appends the string representation of a specified decimal number to this instance.

Append(Double) Append(Double) Append(Double) Append(Double)

Anexa a esta instancia la representación en forma de cadena de un número de punto flotante de precisión doble especificado.Appends the string representation of a specified double-precision floating-point number to this instance.

Append(Int16) Append(Int16) Append(Int16) Append(Int16)

Anexa a esta instancia la representación en forma de cadena de un entero con signo de 16 bits especificado.Appends the string representation of a specified 16-bit signed integer to this instance.

Append(Int32) Append(Int32) Append(Int32) Append(Int32)

Anexa a esta instancia la representación en forma de cadena de un entero con signo de 32 bits especificado.Appends the string representation of a specified 32-bit signed integer to this instance.

Append(Int64) Append(Int64) Append(Int64) Append(Int64)

Anexa a esta instancia la representación en forma de cadena de un entero con signo de 64 bits especificado.Appends the string representation of a specified 64-bit signed integer to this instance.

Append(Object) Append(Object) Append(Object) Append(Object)

Anexa a esta instancia la representación en forma de cadena de un objeto especificado.Appends the string representation of a specified object to this instance.

Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>) Append(ReadOnlySpan<Char>)
Append(SByte) Append(SByte) Append(SByte) Append(SByte)

Anexa a esta instancia la representación en forma de cadena de un entero con signo de 8 bits especificado.Appends the string representation of a specified 8-bit signed integer to this instance.

Append(Single) Append(Single) Append(Single) Append(Single)

Anexa a esta instancia la representación en forma de cadena de un número de punto flotante de precisión sencilla especificado.Appends the string representation of a specified single-precision floating-point number to this instance.

Append(String) Append(String) Append(String) Append(String)

Anexa a esta instancia una copia de la cadena especificada.Appends a copy of the specified string to this instance.

Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32) Append(String, Int32, Int32)

Anexa a esta instancia una copia de una subcadena especificada.Appends a copy of a specified substring to this instance.

Append(StringBuilder) Append(StringBuilder) Append(StringBuilder) Append(StringBuilder)
Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32) Append(StringBuilder, Int32, Int32)
Append(UInt16) Append(UInt16) Append(UInt16) Append(UInt16)

Anexa a esta instancia la representación en forma de cadena de un entero sin signo de 16 bits especificado.Appends the string representation of a specified 16-bit unsigned integer to this instance.

Append(UInt32) Append(UInt32) Append(UInt32) Append(UInt32)

Anexa a esta instancia la representación en forma de cadena de un entero sin signo de 32 bits especificado.Appends the string representation of a specified 32-bit unsigned integer to this instance.

Append(UInt64) Append(UInt64) Append(UInt64) Append(UInt64)

Anexa a esta instancia la representación en forma de cadena de un entero sin signo de 64 bits especificado.Appends the string representation of a specified 64-bit unsigned integer to this instance.

AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object) AppendFormat(IFormatProvider, String, Object)

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza por la representación en forma de cadena de un único argumento utilizando un proveedor de formato especificado.Each format item is replaced by the string representation of a single argument using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object) AppendFormat(IFormatProvider, String, Object, Object)

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza por la representación de cadena de dos argumentos utilizando un proveedor de formato especificado.Each format item is replaced by the string representation of either of two arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object) AppendFormat(IFormatProvider, String, Object, Object, Object)

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza por la representación de cadena de tres argumentos utilizando un proveedor de formato especificado.Each format item is replaced by the string representation of either of three arguments using a specified format provider.

AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[]) AppendFormat(IFormatProvider, String, Object[])

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza con la representación de cadena del argumento correspondiente de una matriz de parámetros, utilizando el proveedor de formato especificado.Each format item is replaced by the string representation of a corresponding argument in a parameter array using a specified format provider.

AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object) AppendFormat(String, Object)

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza por la representación en forma de cadena de un único argumento.Each format item is replaced by the string representation of a single argument.

AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object) AppendFormat(String, Object, Object)

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza por la representación en forma de cadena de uno de dos argumentos.Each format item is replaced by the string representation of either of two arguments.

AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object) AppendFormat(String, Object, Object, Object)

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza por la representación en forma de cadena de uno de tres argumentos.Each format item is replaced by the string representation of either of three arguments.

AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[]) AppendFormat(String, Object[])

Anexa a esta instancia la cadena que se devuelve al procesar una cadena con formato compuesto, que contiene cero o más elementos de formato.Appends the string returned by processing a composite format string, which contains zero or more format items, to this instance. Cada elemento de formato se reemplaza por la representación de cadena del argumento correspondiente de una matriz de parámetros.Each format item is replaced by the string representation of a corresponding argument in a parameter array.

AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[]) AppendJoin(Char, Object[])
AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[]) AppendJoin(Char, String[])
AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[]) AppendJoin(String, Object[])
AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[]) AppendJoin(String, String[])
AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>) AppendJoin<T>(Char, IEnumerable<T>)
AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>) AppendJoin<T>(String, IEnumerable<T>)
AppendLine() AppendLine() AppendLine() AppendLine()

Anexa el terminador de línea predeterminado al final del objeto StringBuilder actual.Appends the default line terminator to the end of the current StringBuilder object.

AppendLine(String) AppendLine(String) AppendLine(String) AppendLine(String)

Anexa una copia de la cadena especificada seguida del terminador de línea predeterminado al final del objeto StringBuilder actual.Appends a copy of the specified string followed by the default line terminator to the end of the current StringBuilder object.

Clear() Clear() Clear() Clear()

Quita todos los caracteres de la instancia de StringBuilder actual.Removes all characters from the current StringBuilder instance.

CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32) CopyTo(Int32, Char[], Int32, Int32)

Copia los caracteres de un segmento especificado de esta instancia al segmento especificado de una matriz Char de destino.Copies the characters from a specified segment of this instance to a specified segment of a destination Char array.

CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32) CopyTo(Int32, Span<Char>, Int32)
EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32) EnsureCapacity(Int32)

Garantiza que la capacidad de la instancia de StringBuilder corresponde como mínimo al valor especificado.Ensures that the capacity of this instance of StringBuilder is at least the specified value.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>) Equals(ReadOnlySpan<Char>)
Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder) Equals(StringBuilder)

Devuelve un valor que indica si esta instancia equivale a un objeto especificado.Returns a value indicating whether this instance is equal to a specified object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean) Insert(Int32, Boolean)

Inserta en la instancia la representación en forma de cadena de un valor booleano en la posición del carácter que se haya especificado.Inserts the string representation of a Boolean value into this instance at the specified character position.

Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte) Insert(Int32, Byte)

Inserta en la instancia la representación en forma de cadena de un entero de 8 bits sin signo, en la posición del carácter que se haya especificado.Inserts the string representation of a specified 8-bit unsigned integer into this instance at the specified character position.

Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char) Insert(Int32, Char)

Inserta en la instancia la representación en forma de cadena de un carácter Unicode concreto en la posición del carácter que se haya especificado.Inserts the string representation of a specified Unicode character into this instance at the specified character position.

Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[]) Insert(Int32, Char[])

Inserta en la instancia la representación en forma de cadena de una matriz concreta de caracteres Unicode en la posición del carácter que se haya especificado.Inserts the string representation of a specified array of Unicode characters into this instance at the specified character position.

Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32) Insert(Int32, Char[], Int32, Int32)

Inserta en la instancia la representación en forma de cadena de una submatriz concreta de caracteres Unicode en la posición del carácter que se haya especificado.Inserts the string representation of a specified subarray of Unicode characters into this instance at the specified character position.

Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal) Insert(Int32, Decimal)

Inserta en la instancia la representación en forma de cadena de un número decimal en la posición del carácter que se haya especificado.Inserts the string representation of a decimal number into this instance at the specified character position.

Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double) Insert(Int32, Double)

Inserta en la instancia la representación en forma de cadena de un número de punto flotante de doble precisión en la posición del carácter que se haya especificado.Inserts the string representation of a double-precision floating-point number into this instance at the specified character position.

Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16) Insert(Int32, Int16)

Inserta en la instancia la representación en forma de cadena de un entero de 16 bits con signo especificado, en la posición del carácter que se haya indicado.Inserts the string representation of a specified 16-bit signed integer into this instance at the specified character position.

Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32) Insert(Int32, Int32)

Inserta en la instancia la representación en forma de cadena de un entero de 32 bits con signo especificado, en la posición del carácter que se haya indicado.Inserts the string representation of a specified 32-bit signed integer into this instance at the specified character position.

Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64) Insert(Int32, Int64)

Inserta en la instancia la representación en forma de cadena de un entero de 64 bits con signo, en la posición del carácter que se haya especificado.Inserts the string representation of a 64-bit signed integer into this instance at the specified character position.

Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object) Insert(Int32, Object)

Inserta en la instancia la representación en forma de cadena de un objeto en la posición del carácter que se haya especificado.Inserts the string representation of an object into this instance at the specified character position.

Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>) Insert(Int32, ReadOnlySpan<Char>)
Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte) Insert(Int32, SByte)

Inserta en la instancia la representación en forma de cadena de un entero de 8 bits con signo especificado, en la posición del carácter que se haya indicado.Inserts the string representation of a specified 8-bit signed integer into this instance at the specified character position.

Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single) Insert(Int32, Single)

Inserta en la instancia la representación en forma de cadena de un número de punto flotante de precisión sencilla, en la posición del carácter que se haya especificado.Inserts the string representation of a single-precision floating point number into this instance at the specified character position.

Insert(Int32, String) Insert(Int32, String) Insert(Int32, String) Insert(Int32, String)

Inserta una cadena en la instancia en la posición del carácter que se haya especificado.Inserts a string into this instance at the specified character position.

Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32) Insert(Int32, String, Int32)

Inserta en la instancia una o más copias de una cadena concreta en la posición del carácter que se haya especificado.Inserts one or more copies of a specified string into this instance at the specified character position.

Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16) Insert(Int32, UInt16)

Inserta en la instancia la representación en forma de cadena de un entero de 16 bits sin signo, en la posición del carácter que se haya especificado.Inserts the string representation of a 16-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32) Insert(Int32, UInt32)

Inserta en la instancia la representación en forma de cadena de un entero de 32 bits sin signo, en la posición del carácter que se haya especificado.Inserts the string representation of a 32-bit unsigned integer into this instance at the specified character position.

Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64) Insert(Int32, UInt64)

Inserta en la instancia la representación en forma de cadena de un entero de 64 bits sin signo, en la posición del carácter que se haya especificado.Inserts the string representation of a 64-bit unsigned integer into this instance at the specified character position.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32) Remove(Int32, Int32)

Quita de la instancia el intervalo de caracteres especificado.Removes the specified range of characters from this instance.

Replace(Char, Char) Replace(Char, Char) Replace(Char, Char) Replace(Char, Char)

Reemplaza todas las apariciones de un carácter en la instancia por otro carácter especificado.Replaces all occurrences of a specified character in this instance with another specified character.

Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32) Replace(Char, Char, Int32, Int32)

En una subcadena de la instancia, reemplaza todas las apariciones de un carácter especificado por otro carácter especificado.Replaces, within a substring of this instance, all occurrences of a specified character with another specified character.

Replace(String, String) Replace(String, String) Replace(String, String) Replace(String, String)

Reemplaza todas las apariciones de una cadena especificada en la instancia por otra cadena especificada.Replaces all occurrences of a specified string in this instance with another specified string.

Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32) Replace(String, String, Int32, Int32)

En una subcadena de la instancia, reemplaza todas las apariciones de una cadena especificada por otra cadena especificada.Replaces, within a substring of this instance, all occurrences of a specified string with another specified string.

ToString() ToString() ToString() ToString()

Convierte el valor de la instancia en un objeto String.Converts the value of this instance to a String.

ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32) ToString(Int32, Int32)

Convierte el valor de una subcadena de la instancia en un objeto String.Converts the value of a substring of this instance to a String.

Implementaciones de interfaz explícitas

ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Rellena un objeto SerializationInfo con los datos necesarios para deserializar el objeto StringBuilder actual.Populates a SerializationInfo object with the data necessary to deserialize the current StringBuilder object.

Se aplica a

Consulte también: