Utilizar la clase StringBuilder
Actualización: noviembre 2007
El objeto String es inmutable. Cada vez que se utiliza uno de los métodos de la clase System.String, se crea un nuevo objeto de cadena en la memoria, que requiere una nueva asignación de espacio para el objeto. 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, si se usa la clase StringBuilder puede mejorar el rendimiento al concatenar muchas cadenas de un bucle.
Crear instancias de un objeto StringBuilder
Se puede crear una nueva instancia de la clase StringBuilder iniciando 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!");
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, se puede crear una nueva instancia de la clase StringBuilder con la cadena "Hello", que tiene una longitud de 5, y especificar que el objeto tenga una capacidad máxima de 25. Cuando se modifica la clase StringBuilder no cambia de tamaño hasta que se alcanza la capacidad máxima. 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);
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;
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 |
Use |
---|---|
Agrega información al final de la StringBuilder actual. |
|
Reemplaza un especificador de formato que se pasa en una cadena con texto con formato. |
|
Inserta una cadena u objeto en el índice especificado de la StringBuilder actual. |
|
Quita el número de caracteres especificado de la StringBuilder actual. |
|
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.
AppendFormat
El método AppendFormat agrega texto al final de StringBuilder, pero implementa también la interfaz IFormattable y, por lo tanto, acepta las cadenas de formato estándar que se describen en la sección de formato. Este método se puede usar para personalizar el formato de variables y agregar esos valores a StringBuilder. En el ejemplo siguiente se usa el método AppendFormat para colocar un valor entero con formato de valor de moneda al final de 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
Insert
El método Insert agrega una cadena u objeto en una posición especificada de la StringBuilder actual. En el ejemplo siguiente se usa este método para insertar una palabra en la sexta posición de 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!
Remove
El método Remove se puede usar para quitar un número especificado de caracteres de la StringBuilder actual, comenzando en un índice de base cero especificado. En el ejemplo siguiente se utiliza el método Remove para acortar 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
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 en un objeto StringBuilder todas las instancias del signo de exclamación (!) y reemplazarlas con el 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?