Actualización: noviembre 2007
Representa una cadena de caracteres modificable. No se puede heredar esta clase.
Espacio de nombres:
System.Text
Ensamblado:
mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class StringBuilder _
Implements ISerializable
Dim instance As StringBuilder
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StringBuilder : ISerializable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class StringBuilder sealed : ISerializable
/** @attribute SerializableAttribute */
/** @attribute ComVisibleAttribute(true) */
public final class StringBuilder implements ISerializable
public final class StringBuilder implements ISerializable
Esta clase representa una cadena como un objeto, cuyo valor es una secuencia de caracteres modificable. Se dice que el valor es modificable porque puede cambiarse una vez se ha creado mediante la adición, sustracción, sustitución o inserción de caracteres. Para comparar, vea la clase String.
La mayoría de los métodos que modifican una instancia de esta clase, devuelven una referencia a esa misma instancia. Dado que se devuelve una referencia a la instancia, se puede llamar a un método o a una propiedad en una referencia. Esto puede ser conveniente si lo que se pretende es escribir una única instrucción que encadene sucesivas operaciones.
La capacidad de un StringBuilder corresponde al mayor número de caracteres que la instancia pueda almacenar en un tiempo determinado, y es mayor o igual que la longitud de la representación de la cadena del valor de la instancia. La capacidad puede incrementarse o disminuirse mediante la propiedad Capacity o bien mediante el método EnsureCapacity pero no puede ser menor que el valor de la propiedad Length.
Se usan valores predeterminados específicos de la implementación si no se especifica la capacidad o la capacidad máxima al inicializarse una instancia de StringBuilder.
Consideraciones de rendimiento
Los métodos Concat y AppendFormat concatenan los nuevos datos en un objeto String o StringBuilder existente. La operación de concatenación en un objeto String siempre crea un nuevo objeto a partir de la cadena existente y los nuevos datos. Un objeto StringBuilder mantiene un búfer para alojar la concatenación de nuevos datos. Los nuevos datos se anexan al final del búfer si hay espacio disponible; de lo contrario, se asigna un nuevo búfer más grande, los datos del búfer original se copian en el nuevo búfer y, a continuación, los nuevos datos se anexan al nuevo búfer.
El rendimiento de una operación de concatenación para un objeto String o StringBuilder depende de la frecuencia con que se produzca la asignación de memoria. La operación de concatenación en un objeto String siempre asigna memoria, mientras que la operación de concatenación en un objeto StringBuilder sólo asigna memoria si el búfer del objeto StringBuilder es demasiado pequeño para alojar los nuevos datos. Por ello, la clase String es preferible para una operación de la concatenación si un se concatena un número fijo de objetos String. En ese caso, el compilador podría combinar en una única operación cada una de las operaciones de concatenación. Los objetos StringBuilder son preferibles para las operaciones de concatenación si se concatena un número arbitrario de cadenas; por ejemplo, si un bucle concatena un número aleatorio de cadenas de datos proporcionados por el usuario.
Notas para los implementadores:
La capacidad predeterminada para esta implementación es 16, y la capacidad máxima predeterminada es Int32..::.MaxValue.
StringBuilder puede asignar más memoria en la medida en que se necesite para almacenar caracteres cuando se amplía el valor de una instancia; la capacidad se ajustará en la misma medida. La cantidad de memoria asignada es específica de la implementación y se produce ArgumentOutOfRangeException si la cantidad de memoria necesaria es mayor que la capacidad máxima.
Por ejemplo, los métodos Append, AppendFormat, EnsureCapacity, Insert y Replace pueden aumentar el valor de una instancia.
Se puede obtener acceso a los caracteres individuales del valor de StringBuilder mediante la propiedad Chars. Las posiciones de los índices empiezan por cero.
Nota de la plataforma Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows CE:
Si se anexan cadenas continuamente a objetos StringBuilder se puede producir la fragmentación del espacio virtual de direcciones. Debido a que el espacio de direcciones virtual es limitado para cada proceso en Windows CE, este problema puede aparecer después de anexar cadenas de 3 MB aproximadamente. Una solución alternativa para este problema consiste en establecer la propiedad MaxCapacity. Alternativamente, abra MemoryStream y escriba cadenas en la secuencia de la memoria en lugar de utilizar la clase StringBuilder.
En el ejemplo de código siguiente se muestra cómo llamar a muchos de los métodos que define la clase StringBuilder.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head id="Head1" runat="server">
<title>Samples</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="ScriptManager1">
</asp:ScriptManager>
<script type="text/javascript">
function buildAString(title){
var headTagStart = "<head>";
var headTagEnd = "</head>";
var titleTagStart = "<title>";
var titleTagEnd = "</title>";
var sb = new Sys.StringBuilder(this._headTagStart);
sb.append(titleTagEnd);
sb.append(title);
sb.append(titleTagEnd);
sb.append(headTagEnd);
// Displays: "The result: <head><title>A Title</title></head>"
alert("The result" + sb.toString());
}
var title = "A Title";
buildAString(title);
</script>
</form>
</body>
</html>
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
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
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
System..::.Object
System.Text..::.StringBuilder
Seguridad para subprocesos
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
.NET Framework
Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0
.NET Compact Framework
Compatible con: 3.5, 2.0, 1.0
XNA Framework
Compatible con: 2.0, 1.0
Referencia