Condividi tramite


Uso della classe StringBuilder in .NET

L'oggetto String non è modificabile. Ogni volta che si usa uno dei metodi nella classe System.String, si crea un nuovo oggetto stringa in memoria che richiede una nuova allocazione di spazio. In situazioni in cui è necessario modificare ripetutamente una stringa, il sovraccarico associato alla creazione di un nuovo oggetto String può essere dispendioso. La classe System.Text.StringBuilder può essere usata per modificare una stringa senza creare un nuovo oggetto. Ad esempio, l'uso della classe StringBuilder può migliorare le prestazioni quando si concatenano più stringhe in un ciclo.

Importazione dello spazio dei nomi System.Type

La classe StringBuilder si trova nello spazio dei nomi System.Text. Per evitare di specificare il nome di tipo completo nel codice, è possibile importare lo spazio dei nomi System.Text:

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

Creazione di un'istanza di un oggetto StringBuilder

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

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

Impostazione di capacità e lunghezza

Anche se StringBuilder è un oggetto dinamico che consente di espandere il numero di caratteri nella stringa incapsulata, è possibile specificare un valore per il numero massimo di caratteri che può contenere. Questo valore rappresenta la capacità dell'oggetto e non deve essere confuso con la lunghezza della stringa contenuta dall'oggetto StringBuilder. Ad esempio, è possibile creare una nuova istanza della classe StringBuilder con la stringa "Hello", che ha una lunghezza pari a 5 caratteri, e specificare che l'oggetto ha una capacità massima di 25 caratteri. Quando si modifica la classe StringBuilder, le dimensioni non vengono riallocate automaticamente fino a quando non viene raggiunta la capacità specificata. In questo caso, il nuovo spazio viene allocato automaticamente e la capacità viene raddoppiata. È possibile specificare la capacità della classe StringBuilder usando uno dei costruttori di overload. L'esempio seguente specifica che l'oggetto myStringBuilder può essere espanso fino a un massimo di 25 spazi.

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

Inoltre, è possibile usare la proprietà Capacity di lettura/scrittura per impostare la lunghezza massima dell'oggetto. L'esempio seguente usa la proprietà Capacity per definire la lunghezza massima dell'oggetto.

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

Il metodo EnsureCapacity può essere usato per verificare la capacità dell'oggetto StringBuilder corrente. Se la capacità è maggiore del valore passato, non vengono apportate modifiche. Invece, se la capacità è minore del valore passato, la capacità corrente viene modificata in modo che corrisponda al valore passato.

La proprietà Length può essere anche visualizzata o impostata. Se si imposta la proprietà Length su un valore maggiore della proprietà Capacity, la proprietà Capacity viene impostata automaticamente sullo stesso valore della proprietà Length. L'impostazione della proprietà Length su un valore minore della lunghezza della stringa all'interno dell'oggetto StringBuilder corrente consente di abbreviare la stringa.

Modifica della stringa StringBuilder

La tabella seguente elenca i metodi che è possibile usare per modificare il contenuto di StringBuilder.

Nome metodo Utilizzo
StringBuilder.Append Aggiunge informazioni alla fine dell'oggetto StringBuilder corrente.
StringBuilder.AppendFormat Sostituisce un identificatore di formato passato in una stringa con il testo formattato.
StringBuilder.Insert Inserisce una stringa o un oggetto nell'indice specificato dell'oggetto StringBuilder corrente.
StringBuilder.Remove Rimuove un numero specificato di caratteri dall'oggetto StringBuilder corrente.
StringBuilder.Replace Sostituisce tutte le occorrenze di un carattere o di una stringa specificati nell'istanza StringBuilder corrente con un altro carattere o un'altra stringa specificati.

Aggiunta

Il metodo Append può essere usato per aggiungere testo o una rappresentazione di stringa di un oggetto alla fine di una stringa rappresentata dall'oggetto StringBuilder corrente. Nell'esempio seguente viene inizializzato un oggetto StringBuilder su "Hello World" e quindi viene aggiunto il testo alla fine dell'oggetto. Lo spazio viene allocato automaticamente in base alle esigenze.

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.

AppendFormat

Il metodo StringBuilder.AppendFormat aggiunge il testo alla fine dell'oggetto StringBuilder. Supporta la funzionalità di formattazione composita (per altre informazioni, vedere Formattazione composita) chiamando l'implementazione IFormattable dell'oggetto o degli oggetti da formattare. Pertanto, accetta le stringhe di formato standard per i valori numerici, di data e ora e di enumerazione, le stringhe di formato personalizzato per i valori numerici e di data e ora e le stringhe di formato definite per i tipi personalizzati. Per informazioni sulla formattazione, vedere Formattazione di tipi). È possibile usare questo metodo per personalizzare il formato delle variabili e aggiungere tali valori a StringBuilder. L'esempio seguente usa il metodo AppendFormat per inserire un valore Integer formattato come valore di valuta alla fine di un oggetto StringBuilder.

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  

Inserisci

Il metodo Insert aggiunge una stringa o un oggetto in una posizione specificata nell'oggetto StringBuilder corrente. L'esempio seguente usa questo metodo per inserire una parola nella sesta posizione di un oggetto StringBuilder.

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!

Rimuovi

È possibile usare il metodo Remove per rimuovere un numero specificato di caratteri dall'oggetto StringBuilder corrente, a partire dall'indice in base zero specificato. L'esempio seguente usa il metodo Remove per abbreviare un oggetto StringBuilder.

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

Sostituzione

Il metodo Replace può essere usato per sostituire i caratteri all'interno dell'oggetto StringBuilder con un altro carattere specificato. L'esempio seguente usa il metodo Replace per cercare un oggetto StringBuilder per tutte le istanze del carattere punto esclamativo (!) e per sostituirle con il carattere punto interrogativo (?).

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?

Conversione di un oggetto StringBuilder in una stringa

È necessario convertire l'oggetto StringBuilder in un oggetto String prima di poter passare la stringa rappresentata dall'oggetto StringBuilder a un metodo che contiene un parametro String o per visualizzarlo nell'interfaccia utente. Per eseguire la conversione, chiamare il metodo StringBuilder.ToString. Nell'esempio seguente vengono chiamati diversi metodi StringBuilder e quindi viene chiamato il metodo StringBuilder.ToString() per visualizzare la stringa.

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

Vedi anche