Ślad: • string

Łańcuchy, czyli napisy

Writing /home/grochu/public_html/wiki/data/cache/8/8f39992830b624017422184db685881a.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/8/8f39992830b624017422184db685881a.metadata failed
Writing /home/grochu/public_html/wiki/data/cache/a/a44703701bff7ed7ef5eebefdf9a5b8a.i failed
Writing /home/grochu/public_html/wiki/data/meta/zajecia/cs_2022_2/sidebar.meta failed
Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/8/8f39992830b624017422184db685881a.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.

Ł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.