Condividi tramite


Utilizzo della classe StringBuilder

L'oggetto String non è modificabile. Ogni volta che si utilizza uno dei metodi nella classe System.String si crea un nuovo oggetto Stringa in memoria, che richiede una nuova allocazione di spazio. Nelle situazioni in cui è necessario modificare ripetutamente una stringa, la creazione di un nuovo oggetto String può causare un overhead non trascurabile. Per modificare una stringa senza creare un nuovo oggetto si può utilizzare la classe System.Text.StringBuilder. Utilizzando ad esempio la classe StringBuilder è possibile migliorare le prestazioni in caso di concatenamento di più stringhe in un ciclo.

È possibile creare una nuova istanza della classe StringBuilder inizializzando la variabile con uno dei metodi del costruttore di overload, come illustrato nell'esempio seguente.

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

Impostazione di capacità e lunghezza

Sebbene l'oggetto StringBuilder sia un oggetto dinamico, che consente cioè di espandere il numero di caratteri della stringa incapsulata, è possibile specificare il valore massimo dei caratteri che la stringa può contenere. Questo valore è detto capacità dell'oggetto e non deve essere confuso con la lunghezza della stringa contenuta nell'oggetto StringBuilder corrente. È possibile ad esempio creare una nuova istanza della classe StringBuilder con la stringa "Hello", che ha lunghezza pari a 5, e specificare che l'oggetto deve avere una capacità massima di 25. Quando si modifica l'oggetto StringBuilder, le sue dimensioni non vengono modificate se non viene raggiunta la capacità specificata. Quando questo accade, il nuovo spazio viene allocato automaticamente e la capacità raddoppiata. È possibile specificare la capacità della classe StringBuilder utilizzando uno dei costruttori di overload. Nell'esempio che segue è specificato che l'oggetto MyStringBuilder può essere ampliato fino a un massimo di 25 spazi.

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

Inoltre, è possibile utilizzare la proprietà in lettura/scrittura Capacity per impostare la lunghezza massima dell'oggetto. Nell'esempio riportato di seguito viene utilizzata la proprietà Capacity per definire la lunghezza massima dell'oggetto.

MyStringBuilder.Capacity = 25
MyStringBuilder.Capacity = 25;

Il metodo EnsureCapacity può essere utilizzato per verificare la capacità della classe StringBuilder corrente. Se la capacità è maggiore del valore passato non viene effettuata alcuna modifica; tuttavia, se la capacità è minore del valore passato la capacità corrente viene modificata e impostata sul valore passato.

Anche la proprietà Length può essere visualizzata o impostata. Se si imposta la proprietà Length su un valore maggiore di quello della proprietà Capacity, quest'ultima verrà automaticamente modificata su un valore identico alla proprietà Length. Impostando la proprietà Length su un valore minore della lunghezza della stringa all'interno dell'oggetto StringBuilder corrente, la stringa viene abbreviata.

Modifica della stringa StringBuilder

Nella tabella riportata di seguito sono elencati i metodi utilizzabili per modificare il contenuto di un oggetto StringBuilder.

Nome del metodo Utilizzo

StringBuilder.Append

Consente di aggiungere informazioni alla fine dell'oggetto StringBuilder corrente.

StringBuilder.AppendFormat

Consente di sostituire un identificatore di formato passato in una stringa con testo formattato.

StringBuilder.Insert

Consente di inserire una stringa o un oggetto in corrispondenza dell'indice specificato dell'oggetto StringBuilder corrente.

StringBuilder.Remove

Consente di rimuovere un numero specificato di caratteri dall'oggetto StringBuilder corrente.

StringBuilder.Replace

Consente di sostituire un carattere specificato in corrispondenza dell'indice specificato.

Append

Il metodo Append può essere utilizzato per aggiungere testo o una rappresentazione in forma di stringa di un oggetto alla fine di una stringa rappresentata dall'oggetto StringBuilder corrente. Nell'esempio che segue un oggetto StringBuilder viene inizializzato con "Hello World" e quindi viene aggiunto testo alla fine dell'oggetto stesso. Lo spazio viene allocato automaticamente secondo le necessità.

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Append(" What a beautiful day.")
Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(MyStringBuilder);

Nella console verrà visualizzato Hello World! What a beautiful day..

AppendFormat

Il metodo AppendFormat aggiunge testo alla fine dell'oggetto StringBuilder, ma consente anche di implementare l'interfaccia IFormattable e quindi di accettare le stringhe di formato standard descritte nella sezione Formattazione dei tipi. È possibile utilizzare questo metodo per personalizzare il formato delle variabili e aggiungere tali valori a un oggetto StringBuilder. Nell'esempio riportato di seguito viene utilizzato il metodo AppendFormat per collocare un valore integer formattato come valore di valuta alla fine di un oggetto StringBuilder.

Dim MyInt As Integer = 25
Dim MyStringBuilder As New StringBuilder("Your total is ")
MyStringBuilder.AppendFormat("{0:C} ", MyInt)
Console.WriteLine(MyStringBuilder)
int MyInt = 25; 
StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(MyStringBuilder);

Nella console verrà visualizzato Your total is $25.00.

Insert

Il metodo Insert consente di aggiungere una stringa o un oggetto in una posizione specificata nell'oggetto StringBuilder corrente. Nell'esempio che segue viene utilizzato questo metodo per inserire una parola nella sesta posizione di un oggetto StringBuilder.

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Insert(6, "Beautiful ")
Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);

Nella console verrà visualizzato Hello Beautiful World!.

Remove

È possibile utilizzare il metodo Remove per rimuovere un numero specificato di caratteri dall'oggetto StringBuilder corrente, a partire da un indice a base zero specificato. Nell'esempio che segue viene utilizzato il metodo Remove per abbreviare un oggetto StringBuilder.

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Remove(5, 7)
Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);

Nella console verrà visualizzato Hello.

Replace

Il metodo Replace può essere utilizzato per sostituire caratteri all'interno dell'oggetto StringBuilder con un altro carattere specificato. Nell'esempio riportato di seguito si utilizza il metodo Replace per cercare in un oggetto StringBuilder tutte le istanze del carattere punto esclamativo (!) e sostituirle con il carattere punto di domanda (?).

Dim MyStringBuilder As New StringBuilder("Hello World!")
MyStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(MyStringBuilder)
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);

Nella console verrà visualizzato Hello World?.

Vedere anche

Riferimenti

System.Text.StringBuilder

Altre risorse

Operazioni di base sulle stringhe