Efektywne manipulowanie Stringiem.
Zadanie do zrobienia.
Chcemy posłużyć się zawartością obiektu typu String, ale chcemy uniknąć jego nadmiarowości przy jego automatycznym tworzeniu z powodu niezmienności takich obiektów.
Obiekty string są niezmienne, to znaczy, że po utworzeniu nie mogą już być modyfikowane. Na przykład, jeśli buduje się String poprzez łączenie pewnej liczby znaków, łańcuchów to runtime (CLR) utworzy zupełnie nowy obiekt String, jeśli tylko zostanie dodany nowy element na końcu tego łańcucha, co prowadzi do znacznej nadmiarowości.
Rozwiązanie zadania.
Powinniśmy użyć klasy StringBuilder do przetworzenia i dokonania konwersji wyniku na łańcuch za pomocą metody StringBuilder.ToString().
Klasa StringBuilder oferuje rozwiązanie w postaci bufora znaków i umożliwia manipulowanie jego zawartością bez konieczności tworzenia nowego obiektu.
W ten sposób można utworzyć nowy pusty obiekt StringBuilder lub zainicjować go przy pomocy zawartości dotychczasowego obiektu String.
Utworzymy teraz metodę która demonstruje wykorzystanie klasy StringBuilder do odwrócenia kolejności znaków w łańcuchu.
class Program
{
public static string ReverseString(string str)
{
// 1 Sprawdzamy czy jest to odwracalny łańcuch
if (str == null || str.Length == 1)
{
return str;
}
// 2 Tworzymy obiekt StringBuilder o wymaganej pojemności
StringBuilder reversString = new StringBuilder(str.Length);
// 3 Tworzymy pętlę która przechodzi przez źródłowy łańcuch od tyłu
// po jednym znaku i dopisuje każdy znak do obiektu StringBuilder
for (int i = str.Length-1; i > -1; i--)
{
reversString.Append(str[i]);
}
// 4 Zwracamy odwrócony łańcuch
return reversString.ToString();
}
static void Main(string[] args)
{
string string1 = "abcdefghij";
string string2 = ReverseString(string1);
Console.WriteLine(string1);
Console.WriteLine(string2);
}
}