Łańcuchy, czyli napisy

Łańcuchy zawierają sekwencję znaków
„Witaj Świecie”

Typ string

string tekst = "Witaj Świecie"

Łańcuch jest typem referencyjnym (jest aliasem klasy System.String)

char [] litery= { 'H', 'e', 'l', 'l','o' }; string tekst = new string(litery);

Tablice łańcuchów

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

Łączenie łańcuchów

„Dodawanie” łańcuchów (konkatenacja) to łączenie napisów

string tekst = "Witaj"; tekst = tekst + " Świecie"; tekst += " Hura!";

Uwaga: wynikiem operacji jest nowy łańcuch.

Dostęp do znaków

Znaki łańcucha dostępne za pomocą operatora [index]
Pierwszy element ma indeks 0 (to jest tablica znaków)

string tekst = "kod"; tekst[2] = 't';

Klasa string

Zobacz: String

Metody i własności	Opis	Przykład
Chars[]	indeksowane elementy łańcucha	tekst[0]
Length	długość łańcucha	tekst.Length
Equals()	czy napisy takie same?	tekst.Equals(„Hello”)
Compare()	kolejność alfabetyczna (-1, 0 , 1)	tekst.Compare(„Hello”)

Contains()	czy zawiera łańcuch?	tekst.Contains(„kot”)
StartsWith(), EndsWith()	czy zaczyna się/kończy się od?	tekst.StartsWith(„Ala”)
IndexOf()	indeks początku pasującego wzorca	tekst.IndexOf(„Ala”)
PadLeft(), PadRight()	uzupełnia napis spacjami do zadanej długości	tekst.PadLeft(25)

Remove()	usuwa ciąg znaków od zadanej pozycji	tekst.Remove(2,5)
Substring()	wyodrębnia ciąg znaków od zadanej pozycji	tekst.Substring(2,5)
Replace()	zamienia fragment łańcucha	tekst.Replace(„Ala”, „Ewa”)
ToLower(), ToUpper()	zamienia litery na małe/wielkie	tekst.ToUpper()
Trim(), TrimEnd(), TrimStart()	usuwa znaki (spacje) z łańcucha	tekst.TrimEnd()
Split()	dzieli łańcuch względem separatora	tekst.Split(' ')
Join()	łaczy tablicę napisów

Ćwiczenie

Napisz program, który wczytuje kolejne linie tekstu z konsoli aż do napotkania pustej linii.

Każda kolejna linia tekstu wypisywana jest w odwrotnej kolejności a wszystki małe litery zamieniane są na wielkie.

Przykład:

Ala ma kota
ATOK AM ALA

Ćwiczenie

Napisz program, który wczytuje kolejne linie tekstu z konsoli aż do napotkania pustej linii.

Po zakończeniu wczytywania tekstu program wypisuje wszystkie wyrazy podanego tekstu w porządku alfabetycznym. Zakładamy, że wyrazy oddzielone są spacjami.

Przykład:

Ala ma kota.
Ala
kota.
ma

Klasa StringBuilder

używanie łączenia łańcuchów może byc nieefektywne, bo za kazdym razem wynikiem jest kopia łancucha

do budowania dłuższych napisów lepiej użyć System.StringBuilder()

StringBuilder sb = new StringBuilder(); // Dodaj łańcuch na końcu sb.Append("Witaj"); // Dodaj linię na końcu sb.AppendLine("Świecie !"); // Dodaj formatowany napis sb.AppendFormat("PI = {0:F5}", Math.PI); // Ile znaków ? Console.WriteLine("sb.Length={0}", sb.Length); // Uzyskaj gotowy łańcuch string tekst = sb.ToString(); Console.WriteLine(tekst);

Ćwiczenie - Porównanie szybkości StringBuildera

Napisz program, który porówna szybkość wykonywania operacji łączenia tekstu pomiędzy operatorem dodawania (+) i klasą StringBuilder().

W tym celu zbuduj napis składającyc się w wielu powtórzeń (np. 10 tysiecy) napisu „Witaj Świecie” i wyznacz czas wykoanania algorytmu dla obu porównywanych metod. Do wyznaczenia casu wykonania programu można wykorzystać własność ''System.DateTime.Now, która zwraca aktualny czas z dokładnością do milisekund. Ta wartość może zostać wywołana do pomiaru czasu przed i po wykonaniu algorytmu. Przedział czasu między dwoma pomiarami czasu jest strukturą typu typu TimeSpan. Struktura ta udostepnia własność TimeSpan.TotalMilliseconds zwracającą całkowitą liczbę milisekund pomiedzy pomiarami czasu.