Łańcuchy znaków

Bardzo często dane kojarzone są z liczbami. Nic bardziej mylnego. W tej części chciałbym napisać kilka słów o łańcuchach znaków, czyli informacji składającej się ze znaków typu char. Ciąg takich znaków tworzy bardzo często słowa, słowa łączą się w zdania i w ten sposób mamy zapamiętaną treść jakiegoś komunikatu.

Typem odpowiedzialnym za przechowywanie właśnie takiej informacji jest typ string. Jest to typ referencyjny. Przykładowa deklaracja i inicjalizacja przedstawiona jest poniżej:

string a = "Informacja";

Jeśli potrzebujemy użyć np. \ lub ” należy poprzedzić je znakiem \. Dlatego też zapisanie do typu string ścieżki dostępu do pliku wymaga użycia większej ilości backslashów:

string path = "..\\folder1\\folder2\\plik.html";

Można zastosować też dosłowne łańcuchy znaków. Ciąg znaków łańcucha należy poprzedzić @. Wtedy powyższa scieżka wyglądała by następująco.

 string path =@ "..\folder1\folder2\plik.html";

Łańcuchy poprzedzone znakiem $  nazywamy łańcuchami interpolowanymi. Ich charakterystyczną cechą jest to,  że umożliwiają wpisywanie wyrażeń w klamrach co oznacza wprowadzenie w uproszczony sposób zmiennej do łańcucha. Przykład podano poniżej:

int x = 10;

Console.Write($"Tyle wynosi wartość zmiennej x: {x}");

Działania na łańcuchach znaków

a) pobieranie znaków z łańcucha

Dostęp do poszczególnych znaków naszego łańcucha jest podobny jak w przypadku tablic. Podajemy więc nazwę i indeks znaku. Pokazano to poniżej:

string wyraz = "Informatyka";

Console.Write(wyraz[2]);

Powinno to wyświetlić literkę f.

b) łączenie łańcuchów

Jak się łatwo domyśleć łączenie łańcuchów jest jakby ich sklejaniem. Jeśli mielibyśmy jeden łańcuch np.33 i ktoś inny drugi np. 11 to uzyskany wynik miałby postać 33112, nie 44. Jako operator łączenia używamy w najprostszym przypadku znaku +. Wykorzystując jednak możliwości typu string możemy użyć metody Join lub Concat. Metoda Concat działa tak samo jak operator  +. Metoda Join łączy ze sobą wyrazy i rozdziela je np. spacją

string[] tablica = {"Ala","ma","kota"};

string razem = string.Join(" ",tablica);

Console.Write(razem);

dla Concat

string razem = string.Concat("Ala ","ma ","kota");

Console.Write(razem);

Uzyskamy w ten sposób zdanie: „Ala ma kota”

Analogicznie będzie działała metoda rozdzielająca łańcuch na poszczególne wyrazy z tym, że zamiast Join używamy Split

string razem = "Ala ma kota";

string[] tablica = razem.Split();

foreach(string word in tablica)

Console.WriteLine(word);

c) przeszukiwanie łańcuchów

Metody, które służą do przeszukiwania łańcuchów to: StartsWith, EndsWidth, Contains. Efektem działania metody jest zwrócenie prawdy albo fałszu. Domyślnie rozpoznawalna jest wielkość liter.  Jeśli chcielibyśmy się jej pozbyć należy ustawić odpowiedni parametr jak poniżej:

string razem = "Ala ma kota";

            Console.Write(razem.StartsWith("ma", StringComparison.InvariantCultureIgnoreCase));

co zwróci wartość false.

W przypadku metody Contains nie ma parametru odnoszącego się do wielkości znaków.

W pokazanym przeszukiwaniu łańcuchów brakuje określenia miejsca wystąpienia szukanego ciągu. Pomocna w takim przypadku będzie metoda IndexOf. Jeśli szukany znak lub część łańcucha nie wystąpi wynikiem jej działania jest wartość -1.   

Console.Write(razem.IndexOf("A", 4, StringComparison.InvariantCultureIgnoreCase));

Tak zapisane polecenie powinno zwrócić pozycję 5. Podobnie jak poprzednio można wyłączyć rozpoznawanie wielkości liter.

Przydatne może być też ustalenie miejsca od którego będzie przeszukiwany łańcuch. Wprowadzamy w tym przypadku dodatkowy parametr. Poniżej podano przykład wywołania metody z uwzględnieniem tego oraz wyłączeniem rozpoznawania wielkości liter.

Metoda IndexOf przeszukuje łańcuch od lewej do prawej. Analogicznie metoda LastIndexOf przeszukuje łańcuch od prawej do lewej.

d) modyfikowanie łańcuchów

Wśród metod obsługujących modyfikację łańcuchów znaków znajdują się:

– wyodrębnienie części łańcucha (String.Substring)

Console.Write("Ala ma kota".Substring(0, 3)); – wynik: Ala

Console.Write("Ala ma kota".Substring(7)); – wynik: kota

– wstawienie znaków na określonej pozycji (String.Insert)

Console.Write("Ala makota".Insert(6, " ")); – wynik: Ala ma kota

– dopełnienie łańcucha (String.PadLeft, String.PadRight)

Console.Write("Dom".PadRight(10, ' ')); – wynik: "Dom       "

– usunięcie znaków na określonej pozycji (String.Remove)

Console.Write("Ala ma kota".Remove(4, 3)); – wynik: Ala kota

– usunięcie z łańcucha określonych znaków (String.Trim, String.TrimStart, String.TrimEnd)

Domyślnie metody te usuwają białe znaki z początku i końca łańcucha

Console.Write("\nAla ma kota\n".Trim()); – wynik: Ala ma kota

– zastąpienie znaków w łańcuchu (String.Replace)

Console.Write("Ala ma kota".Replace(" ", "*")); – wynik: Ala*ma*kota

– zamiana liter na małe lub wielkie (String.ToUpper,String.ToLower)

Console.Write("Ala ma kota".ToUpper()); – wynik: ALA MA KOTA

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *