Klasa StringBuilder dostarcza metody odpowiedzialne za tworzenie i modyfikowanie łańcuchów znaków. Tą klasę stosuje się w przypadku gdy wykonujemy dużą ilość operacji na łańcuchu, ponieważ obiekty klasy StringBuilder podlegają zmianom przez co ta klasa jest bardziej wydajna od klasy String. Znajduje się ona w przestrzeni nazw System.Text
Przykładowe metody:

Metoda Apend()

Metoda ta dodaje łańcuch znaków na koniec aktualnego.
Przykład:

class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();
            
            napis.Append("Tekst1 ");
            napis.Append("Tekst2");
            
            Console.WriteLine(napis);  
            Console.ReadLine();
        }
        }

Rezultat działania aplikacji:

sb1

Rys. Użycie metody Apend()

W metodzie Main() zadeklarowałem obiekt klasy StringBuilder o nazwie napis. Następnie używając metody Apend(), która należy do tej klasy, dodałem łańcuchy znaków do obiektu o nazwie napis. Kolejnym krokiem jest wypisanie stanu tego obiektu na ekranie.

Metoda ApendLine()

Metoda ta dodaje łańcuch znaków na koniec aktualnego. Dodatkowo na koniec łańcucha znaków dodawany jest znak przejścia do nowej linii.
Przykład:

class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();
            
            napis.AppendLine("Tekst1 ");
            napis.AppendLine("Tekst2");
            
            Console.WriteLine(napis);  
            Console.ReadLine();
        }
        }

Rezultat działania aplikacji:

sb2

Rys. Użycie metody ApendLine()

W metodzie Main() zadeklarowałem obiekt klasy StringBuilder o nazwie napis. Następnie używając metody ApendLine(), która należy do tej klasy dodałem łańcuchy znaków do obiektu o nazwie napis. Kolejnym krokiem jest wypisanie stanu tego obiektu na ekranie.

Metoda Clear()

Metoda ta ma za zadanie wyczyszczenie istniejącego łańcucha znaków.
Przykład:

  class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();
            
            napis.AppendLine("Tekst1 ");
            napis.AppendLine("Tekst2");
            
            Console.WriteLine(napis);
            napis.Clear();
            Console.WriteLine("Wartość po użyciu metody Clear: " + napis);
            Console.ReadLine();
        }
        }

Rezultat działania aplikacj:

sb3

Rys. Użycie metody Clear()

Metoda Clear() klasy StringBuilder wyczyściła wszystkie znaki z obiektu.

Metoda Replace()

Metoda ta ma za zadanie zmienić wszystkie wystąpienia danych znaków na nowe znaki.
Przykład:

class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();
            
            napis.AppendLine("addaddaa1 ");
            napis.AppendLine("addaddaa1");
            
            Console.WriteLine(napis);
            napis.Replace("a","ZZ");
            Console.WriteLine("Wartość po użyciu metody Replace:\n" + napis);
            Console.ReadLine();
        }
        }

Rezultat działania aplikacji:

sb4

Rys. Użycie metody Replace()

Jak widzimy metoda Replace() zadziałała i zastąpiła wszystkie wystąpienia znaku ”a” na łańcuch znaków ”ZZ”. Oczywiście używając tej metody możemy zamienić dowolny łańcuch znaków występujący w obiekcie na inny.

Metoda Remove()

Metoda ta usuwa podaną ilość znaków od wybranego przez nas miejsca podanego w formie indeksu pozycji w łańcuchu znaków.
Przykład:

class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();

            napis.AppendLine("addaddaa1 ");
            napis.AppendLine("addaddaa1");

            Console.WriteLine(napis);
            napis.Remove(0, 8);
            Console.WriteLine("Wartość po użyciu metody Remove:\n" + napis);
            Console.ReadLine();
        }
    }

Rezultat działania aplikacji:

sb5

Rys. Użycie metody Remove()

Jak widzimy metoda Remove() usunęła nam znaki zaczynające się od indeksu 0. Ustawiliśmy ilość znaków do usunięcia na 8. W przypadku ustawienia większej liczby niż długość łańcucha znaków w obiekcie aplikacja zwróci nam błąd:

sb6
Rys. Błąd zgłoszony przez kompilator

Metoda Insert()

Metoda ta dodaje podany łańcuch znaków od wybranego przez nas miejsca podanego w formie indeksu pozycji w łańcuchu znaków.
Przykład:

   class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();

            napis.AppendLine("addaddaa1 ");
            napis.AppendLine("addaddaa1");

            Console.WriteLine(napis);
            napis.Insert(2, "Działa");
            Console.WriteLine("Wartość po użyciu metody Insert:\n" + napis);
            Console.ReadLine();
        }
    }

Rezultat działania aplikacji:

sb7a

Rys. Użycie metody Insert()

Jak widzimy metoda Insert() dodała nam łańcuch znaków ”Działa” od indeksu o wartości 2.

Metoda AppendFormat()

Ta metoda działa w taki sam sposób jak metoda String.Format(). Jej zadaniem jest formatowanie łańcucha znaków.
Prosty przykład:

 class Program {
        static void Main() {
            StringBuilder stringBuilder = new StringBuilder();
            int liczba = 10;
           
            stringBuilder.AppendFormat("Liczba ma wartość {0}",liczba);
            
            Console.WriteLine(stringBuilder);
            Console.ReadLine();
        }
    }

Rezultat działania aplikacji:

sb7b
Rys. Użycie metody AppendFormat()

Metoda AppendFormat() ma wiele opcji formatowania łańcucha znaków. Ich opisem zajmę się w innym wpisie.

Właściwość Lenght

Klasa StringBulider posiada własność Lenght zwraca ona wartość typu int, którą jest ilość znaków jaką zawiera obiekt.
Zobaczmy przykład:

  class Program {
        static void Main() {

            StringBuilder napis = new StringBuilder();           
            napis.Append("Napis testowy");                      
          
            Console.WriteLine(napis.Length);
           
            Console.ReadLine();
        }
    }

Oto rezultat działania aplikacji:

sb8
Rys. Wyświetlenie ilości znaków w obiekcie typu StringBuilder

Do właściwości Lenght możemy także przypisać liczbę. Czyli tak jakby zarezerwować ilość znaków, które w dalszym etapie będziemy mogli zmienić. Zobaczmy przykład:

class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();

            napis.Append("Tekst1");
            napis.Length += 100;
            napis.Append("Tekst2");

            Console.WriteLine(napis);  
            Console.ReadLine();
        }
    }

Oto rezultat działania aplikacji:

sb9
Rys. Wyświetlenie obiektu o nazwie napis

W metodzie Main() zadeklarowałem obiekt typu StringBuilder o nazwie napis. Za pomocą metody Append() dodałem do niego łańcuch znaków. Do obecnej długości znaków dodałem 100 pustych znaków dzięki użyciu właściwości Lenght. Ale jak wiadomo obiekt klasy StringBuilder jest modyfikowalny więc używając ponownie metody Append() dodałem do niego nowy łańcuch znaków poszerzając jego długość o kolejne znaki.

Właściwość MaxCapacity

Właściwość ta zwraca wartość typu int oznaczającą maksymalną dostępną ilość znaków w obiekcie klasy StringBuilder.
Przykład:

  class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();        

            Console.WriteLine(napis.MaxCapacity);  
            Console.ReadLine();
        }
    }

Rezultat działania aplikacji:

sb10
Rys. Wyświetlenie maksymalnej ilości znaków obiektu klasy StringBuilder

Właściwość Capacity

Właściwość pokazuje bądź pozwala na przypisanie ilości znaków, które przechowywane są w obecnej komórce pamięci gdzie znajduje się obiekt klasy StringBuilder.
Przykład:

 class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();         

            Console.WriteLine(napis.Capacity);  
            Console.ReadLine();
        }
    }

Rezultat działania aplikacji:

sb11

Rys. Wyświetlenie ilości dostępnych znaków w bieżącej komórce pamięci, w której znajduje się obiekt klasy StringBuilder

Możliwość modyfikacji

W przeciwieństwie do obiektu klasy String obiekt klasy StringBuilder może być modyfikowany. Możemy zmienić dowolny istniejący znak w łańcuchu na inny używając indeksu wpisanego w klamrowy nawias po nazwie obiektu:
nazwa_obiektu[indeks]=’a’;
Należy zwrócić uwagę, że indeks zaczyna się od wartości 0.
Przykład:

 class Program {
        static void Main() {
            StringBuilder napis = new StringBuilder();
            napis.Append("Testowy Napis");
            Console.WriteLine("Napis przed wprowadzeniem zmian: "+napis);
            napis[0] = 'S';
            napis[4] = 'F';
            Console.WriteLine("Napis po wprowadzeniu zmian: "+napis); 
            Console.ReadLine();
        }
    }

Rezultat działania aplikacji:

sb12
Rys. Wyświetlenie wartości obiektu klasy StringBuilder po edycji poszczególnych znaków

Jak widzimy udało się zmienić znaki o indeksie 0 i 4 na inne.

Podsumowanie:
Klasa StringBuilder jest przeznaczona do pracy na dużych łańcuchach znaków. Ma ona przydatne metody, jest ich jednak mniej niż w klasie String. Jeżeli będziemy dużo modyfikować łańcuch znaków zaleca się zastosowanie tej klasy ze względu na to, że jest bardziej wydajna. Obiekt klasy StringBuilder jest modyfikowalny, mamy możliwość edycji dowolnego znaku w łańcuchu.