Share via


Utilizar la clase StringBuilder

El objeto String es inmutable. Cada vez que se usa uno de los métodos de la clase System.String, se crea un nuevo objeto de cadena en la memoria, que necesita una nueva asignación de espacio para ese objeto nuevo. En las situaciones en que sea necesario realizar modificaciones repetidas en una cadena, la sobrecarga asociada a la creación de un nuevo objeto String puede disminuir el rendimiento. La clase System.Text.StringBuilder se puede utilizar para modificar una cadena sin crear un nuevo objeto. Por ejemplo, el uso de la clase StringBuilder puede mejorar el rendimiento al concatenar muchas cadenas en un bucle.

Crear instancias de un objeto StringBuilder

Se puede crear una nueva instancia de la clase StringBuilder inicializando la variable con uno de los métodos de constructor sobrecargados, como se muestra en el ejemplo siguiente.

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

Configurar la capacidad y la longitud

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. Este valor se conoce como la capacidad del objeto y no se debe confundir con la longitud de la cadena que contiene el objeto StringBuilder actual. Por ejemplo, podría crear una nueva instancia de la clase StringBuilder con la cadena "Hola" que tiene una longitud de 5, y podría especificar que el objeto tiene una capacidad máxima de 25. Al modificar StringBuilder, no reasigna el tamaño para sí mismo hasta que se alcance la capacidad. Cuando sucede esto, el nuevo espacio se asigna automáticamente y se dobla la capacidad. La capacidad de la clase StringBuilder se puede especificar con uno de los constructores sobrecargados. En el ejemplo siguiente se especifica que el objeto MyStringBuilder se puede expandir hasta un máximo de 25 espacios.

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

Además, se puede utilizar la propiedad de lectura y escritura Capacity para establecer la longitud máxima del objeto. En el ejemplo siguiente se utiliza la propiedad Capacity para definir la longitud máxima del objeto.

MyStringBuilder.Capacity = 25
MyStringBuilder.Capacity = 25;
MyStringBuilder->Capacity = 25;

El método EnsureCapacity se puede utilizar para comprobar la capacidad actual de StringBuilder. Si la capacidad es mayor que el valor que se pasa, no se hace ningún cambio; sin embargo, si es menor que el valor que se pasa, la capacidad actual se cambia para que coincida con dicho valor.

También se puede ver y establecer la propiedad Length. Si se establece la propiedad Length en un valor mayor que el de la propiedad Capacity, la propiedad Capacity se cambia automáticamente al mismo valor de la propiedad Length. Si se establece la propiedad Length a un valor menor que la longitud de la cadena actual de StringBuilder, se acorta la cadena.

Modificar la cadena StringBuilder

En la tabla siguiente se enumeran los métodos que se pueden utilizar para modificar el contenido de StringBuilder.

Nombre del método

Utilice

StringBuilder.Append

Agrega información al final de la StringBuilder actual.

StringBuilder.AppendFormat

Reemplaza un especificador de formato que se pasa en una cadena con texto con formato.

StringBuilder.Insert

Inserta una cadena u objeto en el índice especificado de la StringBuilder actual.

StringBuilder.Remove

Quita el número de caracteres especificado de la StringBuilder actual.

StringBuilder.Replace

Reemplaza un carácter especificado en el índice especificado.

Append

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 la StringBuilder actual. En el ejemplo siguiente se inicializa una StringBuilder en "Hello World" y, a continuación, se agrega texto al final del objeto. El espacio se asigna automáticamente según sea necesario.

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.
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.
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.

AppendFormat

El método StringBuilder.AppendFormat agrega texto al final del objeto StringBuilder. Admite la característica de formatos compuestos (para obtener más información, vea Formatos compuestos) llamando a la implementación de IFormattable del objeto u objetos a los que se va a dar formato. 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. (Para obtener información sobre el formato, vea Aplicar formato a tipos.) Se puede usar este método para personalizar el formato de variables y anexar esos valores 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.

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  
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      
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

Insert

El método Insert agrega una cadena o un objeto en una posición especificada del objeto StringBuilder actual. En el ejemplo siguiente se usa este método para insertar una palabra en la sexta posición de un objeto StringBuilder.

Dim MyStringBuilder As New 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!
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Insert(6,"Beautiful ");
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!

Remove

Puede usar el método Remove para quitar un número especificado de caracteres del objeto StringBuilder actual, comenzando en un índice de base cero especificado. En el ejemplo siguiente se usa el método Remove para acortar un objeto StringBuilder.

Dim MyStringBuilder As New 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
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Remove(5,7);
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello

Replace

El método Replace se puede usar para reemplazar caracteres del objeto StringBuilder con otro carácter especificado. En el ejemplo siguiente se usa el método Replace para buscar un objeto StringBuilder para todas las instancias del carácter de signo de exclamación (!) y reemplazarlas con el carácter de signo de interrogación (?).

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Replace("!"c, "?"c)
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?
StringBuilder^ MyStringBuilder = gcnew StringBuilder("Hello World!");
MyStringBuilder->Replace('!', '?');
Console::WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World?

Convertir un objeto StringBuilder en una cadena

Debe convertir el objeto StringBuilder en un objeto String antes de poder pasar la cadena representada por el objeto StringBuilder a un método que tenga un parámetro String o mostrarlo en la interfaz de usuario. Puede hacer esta conversión llamando al método StringBuilder.ToString. En el ejemplo siguiente se llama a varios métodos de StringBuilder y, a continuación, se llama al método StringBuilder.ToString() para mostrar la cadena.

Vea también

Referencia

System.Text.StringBuilder

Conceptos

Aplicar formato a tipos

Otros recursos

Operaciones básicas de cadenas

Historial de cambios

Fecha

Historial

Motivo

Información agregada sobre la conversión de StringBuilder a String.

Comentarios de los clientes.