Efektywne manipulowanie Stringiem.

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);
        }
    }

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *