Programování
Retězce
Řetězce (Strings) jsou základní datový typ v mnoha programovacích jazycích,
včetně C, Java, Python a mnoha dalších. Řetězec je v podstatě posloupnost znaků.
Nicméně, skutečná velikost řetězce v paměti může být větší, protože každý znak v řetězci je reprezentován jako System.Char, což je 16bitový datový typ. To znamená, že řetězec “HELLO” by zabral v paměti 10 bajtů (5 znaků * 2 bajty/znak).
Pokud chcete zjistit počet bajtů, které řetězec zabírá v paměti, můžete použít metodu System.Text.Encoding.Unicode.GetByteCount(s)
Reprezentace řetězce v RAM
V paměti RAM je řetězec reprezentován jako pole znaků.
Každý znak v řetězci je uložen na samostatné adrese v paměti.
Například řetězec “HELLO” by byl v paměti reprezentován
jako pole pěti znaků: ‘H’, ‘E’, ‘L’, ‘L’, ‘O’, každý uložený na samostatné adrese.
Vztah mezi řetězcem a polem
Jak již bylo zmíněno, řetězec je v podstatě pole znaků. To znamená, že operace,
které můžete provést na poli, můžete obecně provést i na řetězci.
Například můžete přistupovat k jednotlivým znakům řetězce stejně jako k prvkům pole.
Velikost řetězce
V jazyce C# je maximální délka řetězce 2³¹ znaků. To je proto, že String.Length je 32bitové celé číslo.Nicméně, skutečná velikost řetězce v paměti může být větší, protože každý znak v řetězci je reprezentován jako System.Char, což je 16bitový datový typ. To znamená, že řetězec “HELLO” by zabral v paměti 10 bajtů (5 znaků * 2 bajty/znak).
Pokud chcete zjistit počet bajtů, které řetězec zabírá v paměti, můžete použít metodu System.Text.Encoding.Unicode.GetByteCount(s)
Práce s řetězci
V jazyce C# má třída String mnoho užitečných metod pro manipulaci s řetězci.
Split
Metoda Split rozdělí řetězec na pole řetězců na základě zadaných oddělovačů.
string s = "Hello, World!";
string[] words = s.Split(',');
// words[0] je "Hello" a words[1] je " World!"
Substring
Metoda Substring vrací podřetězec zadaného řetězce.
string s = "Hello, World!";
string sub = s.Substring(0, 5);
// sub je "Hello"
ToLower ToUpper
Metody ToLower a ToUpper převedou všechny znaky řetězce na malá, resp. velká písmena.
string s = "Hello, World!";
string lower = s.ToLower();
string upper = s.ToUpper();
// lower je "hello, world!" a upper je "HELLO, WORLD!"
Replace
Metoda Replace nahradí všechny výskyty zadaného podřetězce jiným podřetězcem.
string s = "Hello, World!";
string replaced = s.Replace("World", "C#");
// replaced je "Hello, C#!"
Trim
Metoda Trim odstraní bílé znaky na začátku a na konci řetězce. Například:
string s = " Hello, World! ";
string trimmed = s.Trim();
// trimmed je "Hello, World!"
PadLeft a PadRight
Metody PadLeft a PadRight doplní řetězec na zadanou délku přidáním zadaných znaků na začátek, resp. na konec řetězce.
string s = "Hello";
string padded = s.PadRight(10, '.');
// padded je "Hello....."
Spojování řetězců
V jazyce C# existují různé způsoby, jak spojit řetězce.
Operátor +
Můžete použít operátor + pro spojení dvou řetězců.
string s1 = "Hello";
string s2 = "World";
string s3 = s1 + ", " + s2; // s3 je "Hello, World"
Metoda Concat
Metoda String.Concat spojí dva nebo více řetězců do jednoho.
string s1 = "Hello";
string s2 = "World";
string s3 = String.Concat(s1, ", ", s2); // s3 je "Hello, World"
Metoda Join
Metoda String.Join spojí pole nebo kolekci řetězců do jednoho řetězce, přičemž mezi ně vloží zadaný oddělovač.
string[] words = { "Hello", "World" };
string s = String.Join(", ", words); // s je "Hello, World"
StringBuilder
Třída StringBuilder je nejefektivnější způsob, jak spojit velké množství řetězců. StringBuilder vytváří modifikovatelný objekt řetězce, který může být efektivně upravován bez vytváření nových řetězců.
StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(", ");
sb.Append("World");
string s = sb.ToString(); // s je "Hello, World"
Specialní znaky
Bílé znaky jsou znaky, které nejsou viditelné, ale slouží k formátování textu. Patří sem mezera ( ), tabulátor (\t), nový řádek (\n), návrat vozíku (\r) a další.
Escape sekvence jsou speciální znaky, které se v programovacích jazycích používají k reprezentaci určitých speciálních znaků, které by bylo jinak obtížné napsat.
V tomto případě @ říká C#, že by měl řetězec path interpretovat doslova, takže \ nejsou považovány za escape sekvence.
Escape sekvence jsou speciální znaky, které se v programovacích jazycích používají k reprezentaci určitých speciálních znaků, které by bylo jinak obtížné napsat.
- \n - nový řádek
- \t - tabulátor
- \\ - zpětné lomítko
- \' - apostrof
- \" nebo "" "" - uvozovky
- \r - návrat vozíku
- Bonus:
- \b - zpětné tlačítko
- \f - nová stránka
- \v - vertikální tabulátor
- \0 - nulový znak
V tomto případě @ říká C#, že by měl řetězec path interpretovat doslova, takže \ nejsou považovány za escape sekvence.
string path = @"C:\Users\JohnDoe\Documents";
Interpolace řetězců
V jazyce C# můžete použít interpolaci řetězců pro vložení hodnot proměnných přímo do řetězců. To se dělá pomocí zápisu $"...", kde ... je řetězec s vloženými proměnnými v složených závorkách {}. Například:
String literal je způsob zápisu řetězce, kde to co napišem tak tam bude, přesně jak string vypada v kodu, tak bude i vypsaný.
POZOR! tohle bylo přidáno nedávno (listopad 8. 2022) do c# a ještě není všude podporovaný a například samotné Microsoft docs nemají na to podporu.
string name = "John";
string greeting = $"Hello, {name}!";
// greeting je "Hello, John!"
V tomto případě je hodnota proměnné name vložena přímo do řetězce greeting.
String literal je způsob zápisu řetězce, kde to co napišem tak tam bude, přesně jak string vypada v kodu, tak bude i vypsaný.
POZOR! tohle bylo přidáno nedávno (listopad 8. 2022) do c# a ještě není všude podporovaný a například samotné Microsoft docs nemají na to podporu.
var singleLine = """This is a "raw string literal". It can contain characters like \, ' and ".""";
var JSON = """
'{
"name":"John",
"age":30,
"car":null
}'
""";
Více informací: learn.microsoft