Lekce 7: Jak efektivně manipulovat s řetězci v C#
Řetězce jsou neodmyslitelnou součástí většiny programovacích jazyků, včetně C#. Jsou nezbytné při zpracování textu, práci s uživatelským vstupem, zobrazování výstupů nebo komunikaci mezi aplikacemi. C# poskytuje výkonný nástroj pro práci s řetězci prostřednictvím třídy string
. Tato třída nabízí různé metody pro manipulaci s textem, analýzu, porovnávání a formátování řetězců.
V této lekci se zaměříme na základní operace s řetězci, metody dostupné v třídě string
, a také na výkonovou optimalizaci při práci s textovými daty. Podíváme se na různé způsoby formátování řetězců a na to, jak efektivně zpracovávat velké objemy textových dat pomocí třídy StringBuilder
.
Co je řetězec?
V C# jsou řetězce reprezentovány pomocí třídy string
, což je alias pro třídu System.String
. Řetězec je imutabilní, což znamená, že jakmile je vytvořen, nelze jeho obsah změnit. Jakákoliv operace, která vypadá jako úprava řetězce, ve skutečnosti vytváří nový řetězec a starý zůstává nezměněn.
Příklad deklarace a inicializace řetězce:
string text = "Ahoj, světe!";
V tomto příkladu je vytvořen řetězec s hodnotou „Ahoj, světe!“. Hodnota je uložena v proměnné text
a zůstává neměnná.
Základní operace s řetězci
- Spojování řetězců (konkatenace)
Řetězce můžeme spojovat pomocí operátoru +
, což je jeden z nejběžnějších způsobů práce s textovými daty.
string cast1 = "Ahoj";
string cast2 = "světe";
string celek = cast1 + ", " + cast2 + "!";
V tomto případě jsou dva řetězce cast1 a cast2 spojeny a výsledný řetězec je „Ahoj, světe!“.
- Zjištění délky řetězce
Délku řetězce, tedy počet znaků, můžeme zjistit pomocí vlastnosti Length
.
string text = "Ahoj, světe!";
int delka = text.Length;
Zde proměnná delka
bude obsahovat hodnotu 12, což odpovídá počtu znaků v řetězci „Ahoj, světe!“.
- Přístup k jednotlivým znakům
Jednotlivé znaky v řetězci můžeme získat pomocí indexace, přičemž index začíná od nuly.
char prvniZnak = text[0]; // A
char posledniZnak = text[text.Length - 1]; // !
Zde proměnná prvniZnak
bude obsahovat znak ‚A‘ a posledniZnak
bude ‚!‘, což je poslední znak řetězce.
Běžné metody pro práci s řetězci
Třída string
poskytuje mnoho užitečných metod pro manipulaci s textem. Zde je několik často používaných metod:
Substring
– Vytvoření podřetězce
Metoda Substring
vrací část řetězce, počínaje zadaným indexem.
string text = "Ahoj, světe!";
string podretezec = text.Substring(6, 5); // "světe"
Zde podřetězec bude obsahovat hodnotu „světe“, protože vybíráme 5 znaků počínaje indexem 6.
ToUpper
aToLower
– Převedení na velká nebo malá písmena
Tyto metody převedou všechny znaky řetězce na velká nebo malá písmena.
string velkyText = text.ToUpper(); // AHOJ, SVĚTE!
string malyText = text.ToLower(); // ahoj, světe!
Replace
– Nahrazení části řetězce
Metoda Replace
nahrazuje všechny výskyty určitého podřetězce nebo znaku v řetězci.
string novyText = text.Replace("světe", "C#"); // "Ahoj, C#!"
IndexOf
– Najde první výskyt znaku nebo podřetězce
Metoda IndexOf
vrátí index prvního výskytu zadaného znaku nebo podřetězce.
int pozice = text.IndexOf("světe"); // 6
Pokud hledaný řetězec není nalezen, metoda vrátí -1.
Trim
– Odstranění mezer
Metoda Trim
odstraní bílé znaky (mezery, nové řádky) na začátku a na konci řetězce.
string textSMezerami = " Ahoj, světe! ";
string orezanyText = textSMezerami.Trim(); // "Ahoj, světe!"
Formátování řetězců
C# nabízí několik způsobů, jak dynamicky formátovat řetězce. Můžeme použít konkatenaci, metodu String.Format
, nebo nejnovější způsob – interpolaci řetězců.
- Konkatenace
Jednoduché formátování lze provést pomocí operátoru +
.
string jmeno = "Petr";
int vek = 30;
string vysledek = "Jmenuji se " + jmeno + " a je mi " + vek + " let.";
String.Format
Metoda String.Format
umožňuje vkládání hodnot do textového řetězce pomocí speciálních formátovacích zástupných znaků.
string vysledek = String.Format("Jmenuji se {0} a je mi {1} let.", jmeno, vek);
- Interpolace řetězců
Interpolace řetězců je moderní a čitelnější způsob formátování. Při interpolaci používáme znak $
před řetězcem a do složených závorek {}
vkládáme proměnné.
string vysledek = $"Jmenuji se {jmeno} a je mi {vek} let.";
Efektivní práce s řetězci – StringBuilder
Řetězce v C# jsou neměnné, což znamená, že každá úprava řetězce vytvoří nový objekt v paměti. To může být neefektivní, zejména pokud často provádíme úpravy velkých řetězců. Pro efektivní manipulaci s textem, který se často mění, je lepší použít třídu StringBuilder
z knihovny System.Text
.
Příklad použití StringBuilder
:
using System.Text;
StringBuilder sb = new StringBuilder();
sb.Append("Ahoj");
sb.Append(", ");
sb.Append("světe!");
string vysledek = sb.ToString();
Tento přístup je mnohem efektivnější, pokud pracujeme s textem, který se často mění nebo upravuje, protože nedochází k vytváření zbytečných instancí řetězců.
Závěr
Práce s řetězci je nezbytnou dovedností pro každého vývojáře. V této lekci jsme si ukázali, jak C# poskytuje silnou podporu pro manipulaci s textem prostřednictvím třídy string
a jejích metod. Naučili jsme se, jak vytvářet a upravovat řetězce, jak je formátovat a jak efektivně pracovat s velkým množstvím textu pomocí třídy StringBuilder
. Pochopení práce s řetězci nám umožní vytvářet flexibilní a výkonné aplikace, které mohou efektivně zpracovávat textová data.