Utilizar la clase StringBuilder en .NETUsing the StringBuilder Class in .NET

El objeto String es inmutable.The String object is immutable. Cada vez que se usa uno de los métodos de la clase System.String, se crea un objeto de cadena en la memoria, lo que requiere una nueva asignación de espacio para ese objeto.Every time you use one of the methods in the System.String class, you create a new string object in memory, which requires a new allocation of space for that new object. En las situaciones en las que es necesario realizar modificaciones repetidas en una cadena, la sobrecarga asociada a la creación de un objeto String puede ser costosa.In situations where you need to perform repeated modifications to a string, the overhead associated with creating a new String object can be costly. La clase System.Text.StringBuilder se puede usar para modificar una cadena sin crear un objeto.The System.Text.StringBuilder class can be used when you want to modify a string without creating a new object. Por ejemplo, el uso de la clase StringBuilder puede mejorar el rendimiento al concatenar muchas cadenas en un bucle.For example, using the StringBuilder class can boost performance when concatenating many strings together in a loop.

Importar el espacio de nombres System.TextImporting the System.Text Namespace

La clase StringBuilder se encuentra en el espacio de nombres System.Text.The StringBuilder class is found in the System.Text namespace. Para evitar proporcionar un nombre de tipo completo en el código, se puede importar el espacio de nombres System.Text:To avoid having to provide a fully qualified type name in your code, you can import the System.Text namespace:

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

Crear instancias de un objeto StringBuilderInstantiating a StringBuilder Object

Para crear una instancia de la clase StringBuilder, inicialice la variable con uno de los métodos de constructor sobrecargado, como se muestra en el ejemplo siguiente.You can create a new instance of the StringBuilder class by initializing your variable with one of the overloaded constructor methods, as illustrated in the following example.

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

Configurar la capacidad y la longitudSetting the Capacity and Length

Aunque StringBuilder es un objeto dinámico que permite expandir el número de caracteres de la cadena que encapsula, se puede especificar un valor para el número máximo de caracteres que puede contener.Although the StringBuilder is a dynamic object that allows you to expand the number of characters in the string that it encapsulates, you can specify a value for the maximum number of characters that it can hold. Este valor se conoce como la capacidad del objeto y no debe confundirse con la longitud de la cadena que el objeto StringBuilder actual contiene.This value is called the capacity of the object and should not be confused with the length of the string that the current StringBuilder holds. Por ejemplo, puede crear una instancia de la clase StringBuilder con la cadena "Hello", que tiene una longitud de 5, y especificar que el objeto tiene una capacidad máxima de 25.For example, you might create a new instance of the StringBuilder class with the string "Hello", which has a length of 5, and you might specify that the object has a maximum capacity of 25. Al modificar StringBuilder, este no reasigna el tamaño para sí mismo hasta que se alcanza la capacidad.When you modify the StringBuilder, it does not reallocate size for itself until the capacity is reached. Cuando esto sucede, el nuevo espacio se asigna automáticamente y se duplica la capacidad.When this occurs, the new space is allocated automatically and the capacity is doubled. La capacidad de la clase StringBuilder se puede especificar con uno de los constructores sobrecargados.You can specify the capacity of the StringBuilder class using one of the overloaded constructors. En el ejemplo siguiente se especifica que el objeto myStringBuilder se puede expandir hasta un máximo de 25 espacios.The following example specifies that the myStringBuilder object can be expanded to a maximum of 25 spaces.

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

Además, se puede usar la propiedad de lectura y escritura Capacity para establecer la longitud máxima del objeto.Additionally, you can use the read/write Capacity property to set the maximum length of your object. En el ejemplo siguiente se usa la propiedad Capacity para definir la longitud máxima del objeto.The following example uses the Capacity property to define the maximum object length.

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

El método EnsureCapacity se puede usar para comprobar la capacidad del objeto StringBuilder actual.The EnsureCapacity method can be used to check the capacity of the current StringBuilder. Si la capacidad es mayor que el valor transmitido, no se realiza ningún cambio, pero si es menor que este, la capacidad actual se cambia para que coincida con el valor en cuestión.If the capacity is greater than the passed value, no change is made; however, if the capacity is smaller than the passed value, the current capacity is changed to match the passed value.

También se puede ver o establecer la propiedad Length.The Length property can also be viewed or set. Si la propiedad Length se establece en un valor mayor que el de la propiedad Capacity, la propiedad Capacity se cambia automáticamente al mismo valor de la propiedad Length.If you set the Length property to a value that is greater than the Capacity property, the Capacity property is automatically changed to the same value as the Length property. Si la propiedad Length se establece en un valor menor que la longitud de la cadena de StringBuilder actual, se acorta la cadena.Setting the Length property to a value that is less than the length of the string within the current StringBuilder shortens the string.

Modificar la cadena StringBuilderModifying the StringBuilder String

En la tabla siguiente se enumeran los métodos que se pueden usar para modificar el contenido de StringBuilder.The following table lists the methods you can use to modify the contents of a StringBuilder.

Nombre del métodoMethod name UsarUse
StringBuilder.Append Anexa información al final del objeto StringBuilder actual.Appends information to the end of the current StringBuilder.
StringBuilder.AppendFormat Reemplaza a un especificador de formato que se pasa en una cadena con texto con formatoReplaces a format specifier passed in a string with formatted text.
StringBuilder.Insert Inserta una cadena o un objeto en el índice especificado del elemento StringBuilder actual.Inserts a string or object into the specified index of the current StringBuilder.
StringBuilder.Remove Quita el número de caracteres especificado del objeto StringBuilder actual.Removes a specified number of characters from the current StringBuilder.
StringBuilder.Replace Reemplaza un carácter concreto en un índice especificado.Replaces a specified character at a specified index.

AnexarAppend

El método Append se puede usar para agregar texto o la representación de cadena de un objeto al final de una cadena representada por el objeto StringBuilder actual.The Append method can be used to add text or a string representation of an object to the end of a string represented by the current StringBuilder. En el ejemplo siguiente, se inicializa StringBuilder en "Hello World" y, después, se anexa texto al final del objeto.The following example initializes a StringBuilder to "Hello World" and then appends some text to the end of the object. El espacio se asigna automáticamente según sea necesario.Space is allocated automatically as needed.

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

AppendFormatAppendFormat

El método StringBuilder.AppendFormat agrega texto al final del objeto StringBuilder.The StringBuilder.AppendFormat method adds text to the end of the StringBuilder object. Admite la característica de formatos compuestos (para obtener más información, consulte Formatos compuestos) mediante la llamada a la implementación de IFormattable del objeto u objetos a los que se va a dar formato.It supports the composite formatting feature (for more information, see Composite Formatting) by calling the IFormattable implementation of the object or objects to be formatted. Por tanto, acepta las cadenas de formato estándar para valores numéricos, de fecha y hora y de enumeración; las cadenas de formato personalizado para valores numéricos y de fecha y hora; y las cadenas de formato definidas para los tipos personalizados.Therefore, it accepts the standard format strings for numeric, date and time, and enumeration values, the custom format strings for numeric and date and time values, and the format strings defined for custom types. (Para obtener información acerca del formato, consulte Aplicar formato a tipos.) Este método se puede usar para personalizar el formato de las variables y anexar esos valores a StringBuilder.(For information about formatting, see Formatting Types.) You can use this method to customize the format of variables and append those values to a StringBuilder. En el ejemplo siguiente se usa el método AppendFormat para colocar un valor entero con formato de valor de divisa al final de un objeto StringBuilder.The following example uses the AppendFormat method to place an integer value formatted as a currency value at the end of a StringBuilder object.

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

InsertarInsert

El método Insert agrega una cadena o un objeto en una posición especificada del objeto StringBuilder actual.The Insert method adds a string or object to a specified position in the current StringBuilder object. En el ejemplo siguiente se usa este método para insertar una palabra en la sexta posición de un objeto StringBuilder.The following example uses this method to insert a word into the sixth position of a StringBuilder object.

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

QuitarRemove

El método Remove se puede usar para quitar un número de caracteres especificado del objeto StringBuilder, a partir de un índice de base cero definido.You can use the Remove method to remove a specified number of characters from the current StringBuilder object, beginning at a specified zero-based index. En el ejemplo siguiente se usa el método Remove para acortar un objeto StringBuilder.The following example uses the Remove method to shorten a StringBuilder object.

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

ReemplazarReplace

El método Replace se puede usar para reemplazar caracteres del objeto StringBuilder por otro carácter especificado.The Replace method can be used to replace characters within the StringBuilder object with another specified character. En el ejemplo siguiente se usa el método Replace para buscar todas las instancias del carácter de signo de exclamación (!) y reemplazarlas por el carácter de signo de interrogación (?) en un objeto StringBuilder.The following example uses the Replace method to search a StringBuilder object for all instances of the exclamation point character (!) and replace them with the question mark character (?).

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

Convertir un objeto StringBuilder en StringConverting a 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. Para hacer esta conversión, llame al método StringBuilder.ToString.You do this conversion by calling the StringBuilder.ToString method. En el ejemplo siguiente se llama a varios métodos de StringBuilder y después se llama al método StringBuilder.ToString() para mostrar la cadena.The following example calls a number of StringBuilder methods and then calls the StringBuilder.ToString() method to display the string.

using System;
using System.Text;

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

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

Vea tambiénSee also