Łańcuchy znaków (string) w języku C#

Łańcuch znaków to ciąg pojedynczych znaków (np. słowo, zdanie, kod). W C# reprezentowany jest przez typ string, który wewnętrznie przechowuje dane jako tablicę znaków (char[]).

W C# string to alias typu referencyjnego System.String.

Przechowywanie jako lista obiektów char

Każdy string składa się z pojedynczych znaków (char), do których można uzyskać dostęp jak do elementów tablicy:

🧪 Przykład:

string tekst = "C#";
char pierwszyZnak = tekst[0];  // 'C'
Console.WriteLine("Pierwszy znak: " + pierwszyZnak);

📌 Ważne:

  • Indeksowanie działa jak w tablicach ([0], [1], itd.)
  • string to niemutowalny typ – nie można zmieniać pojedynczych znaków przez przypisanie (np. tekst[0] = 'A' → ❌ błąd)

Typ string w C# – właściwości i cechy

✅ Główne właściwości typu string:

  • Jest referencyjny, ale zachowuje się często jak typ wartościowy (np. niezmienność).
  • Jest niemutowalny – każda operacja, która zmienia tekst, tak naprawdę tworzy nowy łańcuch znaków.
  • Wspiera operatory +, ==, !=, + (łączenie), [] (dostęp do znaków).

Pomocnicze metody i właściwości dla string

C# oferuje bardzo wiele przydatnych metod dla operacji na tekstach. Oto najważniejsze:

string.Empty

Zwraca pusty ciąg znaków (""), czyli bez żadnych znaków.

string pusty = string.Empty;
Console.WriteLine(pusty.Length);  // 0

string.Join(separator, kolekcja)

Łączy elementy tablicy lub listy w jeden łańcuch znaków z separatorem.

string[] imiona = { "Jan", "Anna", "Piotr" };
string wynik = string.Join(", ", imiona);  // "Jan, Anna, Piotr"
Console.WriteLine(wynik);

Trim(), TrimStart(), TrimEnd()

Usuwa białe znaki (spacje, tabulatory) z początku i/lub końca tekstu.

string zSpacjami = "  tekst  ";
Console.WriteLine("[" + zSpacjami.Trim() + "]"); // "[tekst]"

ToUpper(), ToLower()

Zmienia wszystkie znaki na wielkie lub małe litery.

string tekst = "C# jest super!";
Console.WriteLine(tekst.ToUpper());  // "C# JEST SUPER!"

Substring(start, length)

Zwraca fragment łańcucha znaków.

string kod = "AB1234";
string fragment = kod.Substring(2, 4);  // "1234"

Contains(), StartsWith(), EndsWith()

Sprawdza, czy tekst zawiera, zaczyna się lub kończy na dany ciąg.

string nazwa = "Programowanie";
Console.WriteLine(nazwa.Contains("gram"));     // true
Console.WriteLine(nazwa.StartsWith("Pro"));    // true
Console.WriteLine(nazwa.EndsWith("wanie"));    // true

Formatowanie łańcuchów znaków

C# oferuje wiele sposobów na formatowanie tekstu – czyli tworzenie dynamicznych łańcuchów z danych liczbowych, dat, zmiennych itd.

Interpolacja łańcuchów ($)

string imie = "Kasia";
int wiek = 25;
Console.WriteLine($"Imię: {imie}, Wiek: {wiek}");

Formatowanie z string.Format()

string wynik = string.Format("Wartość: {0}, Rok: {1}", 3.14, 2025);
Console.WriteLine(wynik);

Formatowanie liczb i dat

double cena = 1234.5678;
Console.WriteLine($"Cena: {cena:F2} zł");   // zaokrąglenie do 2 miejsc: 1234.57 zł

DateTime teraz = DateTime.Now;
Console.WriteLine($"Dziś jest {teraz:dd.MM.yyyy}");

🧪 Przykład programu – analiza łańcucha znaków

Console.Write("Wpisz swoje imię: ");
string imie = Console.ReadLine();

Console.WriteLine($"Cześć, {imie.ToUpper()}!");
Console.WriteLine($"Twoje imię ma {imie.Length} znaków.");

if (imie.StartsWith("A"))
{
    Console.WriteLine("Twoje imię zaczyna się na literę A!");
}

Rozszerzenie: inne przydatne metody

MetodaDziałanie
Replace(stary, nowy)Zamienia podciąg w ciągu znaków
Split(separator)Dzieli tekst na tablicę
IndexOf(znak)Zwraca pozycję pierwszego wystąpienia
PadLeft(n) / PadRight(n)Dodaje znaki, aby wyrównać tekst

Podsumowanie

ElementPrzykładOpis
Przechowywanietekst[0]dostęp do pojedynczego znaku
Właściwościtekst.Lengthliczba znaków
Metody tekstoweTrim(), ToUpper()modyfikacje tekstu
Formatowanie$"Imię: {imie}"interpolacja
Łączeniestring.Join(", ", tablica)tworzenie listy tekstowej

✏️ Ćwiczenia

  1. Wpisz dowolne zdanie. Policz, ile ma znaków i ile zawiera spacji.
  2. Podaj numer PESEL. Wypisz tylko jego pierwsze 6 cyfr.
  3. Z łańcucha „Programowanie w C#” usuń białe znaki i zamień wszystkie litery na małe.
  4. Użyj string.Join(), aby z tablicy imion wygenerować jedną linię tekstu.