Stränghantering
Strängar i C# är objekt av typen string (alias för System.String). De är immutabla — du kan inte ändra en sträng, bara skapa en ny. Klassen har dock massor av inbyggda metoder för att arbeta med text.
När du läst detta ska du kunna
- Använda vanliga strängmetoder:
Length,ToUpper,ToLower,Trim,Replace,Contains,StartsWith,Split,Substring - Konkatenera strängar med
+,$""ochstring.Concat - Använda
string.IsNullOrEmptyochstring.IsNullOrWhiteSpace - Förstå vad immutabilitet betyder i praktiken
Skapa strängar
string greeting = "Hej världen";string name = "Marcus";
// Konkateneringstring message = greeting + ", " + name + "!";Console.WriteLine(message);
// Interpolation — föredras i modern C#string interpolated = $"{greeting}, {name}!";Console.WriteLine(interpolated);Output
Hej världen, Marcus!Hej världen, Marcus!Vanliga strängmetoder
string text = " Hej Världen ";
Console.WriteLine(text.Length); // 15Console.WriteLine(text.Trim()); // "Hej Världen"Console.WriteLine(text.ToUpper()); // " HEJ VÄRLDEN "Console.WriteLine(text.ToLower()); // " hej världen "Console.WriteLine(text.Trim().Length); // 11Output
15Hej Världen HEJ VÄRLDEN hej världen11Söka i strängar
string text = "C# är ett roligt språk";
Console.WriteLine(text.Contains("roligt")); // TrueConsole.WriteLine(text.StartsWith("C#")); // TrueConsole.WriteLine(text.EndsWith("Java")); // FalseConsole.WriteLine(text.IndexOf("ett")); // 6Ersätta och dela
string sentence = "katten satt på mattan";
// Ersättstring replaced = sentence.Replace("katten", "hunden");Console.WriteLine(replaced); // hunden satt på mattan
// Dela uppstring csv = "Anna,Björn,Clara";string[] parts = csv.Split(',');
foreach (var part in parts) Console.WriteLine(part);Output
hunden satt på mattanAnnaBjörnClaraPlocka ut delar
string text = "Hej världen";
// Substring(startIndex)Console.WriteLine(text.Substring(4)); // världen
// Substring(startIndex, length)Console.WriteLine(text.Substring(4, 3)); // vär
// Range-syntax (C# 8) — samma sakConsole.WriteLine(text[4..]); // världenConsole.WriteLine(text[4..7]); // värKontrollera tomma strängar
string a = "";string b = " ";string c = null;
Console.WriteLine(string.IsNullOrEmpty(a)); // TrueConsole.WriteLine(string.IsNullOrEmpty(b)); // False — innehåller mellanslagConsole.WriteLine(string.IsNullOrWhiteSpace(b)); // True — bara whitespaceConsole.WriteLine(string.IsNullOrEmpty(c)); // TrueStringBuilder — för många sammanslagningar
string är immutabel, så varje + skapar ett nytt objekt. Vid hundratals sammanslagningar i en loop är StringBuilder mer effektivt:
var sb = new System.Text.StringBuilder();
for (int i = 1; i <= 5; i++){ sb.Append($"Rad {i}\n");}
Console.Write(sb.ToString());Output
Rad 1Rad 2Rad 3Rad 4Rad 5Vanliga metoder — snabbreferens
| Metod | Vad den gör |
|---|---|
.Length | Antal tecken |
.Trim() / .TrimStart() / .TrimEnd() | Ta bort whitespace |
.ToUpper() / .ToLower() | Ändra skiftläge |
.Contains(s) | Finns delsträngen? |
.StartsWith(s) / .EndsWith(s) | Börjar/slutar med? |
.IndexOf(s) | Positionen för första förekomsten (−1 om inte hittad) |
.Replace(old, new) | Ersätt alla förekomster |
.Split(char) | Dela upp till array |
.Substring(start) | Del från position |
string.IsNullOrEmpty(s) | Null eller tom? |
string.IsNullOrWhiteSpace(s) | Null, tom eller bara mellanslag? |
Escape-sekvenser
Escape-sekvenser skrivs med \ inuti en sträng och representerar specialtecken:
| Sekvens | Tecken | Användning |
|---|---|---|
\n | Radbrytning | Ny rad |
\t | Tabb | Indragning |
\r | Vagnretur | Windows radslut (ofta \r\n) |
\\ | Backslash | Filsökvägar |
\" | Citattecken | Inuti en ""-sträng |
\0 | Null-tecken | Strängavslutning i C/C++ |
\e | ESC (ASCII 27) | ANSI-terminalkoder |
\e — ESC-tecknet och ANSI-färger
\e är ett ESC-tecken som används för att styra terminalen — till exempel för att färga text. Utan \e behövde man skriva \x1b eller \u001b:
// Färgad terminalutskrift med \eConsole.WriteLine("\e[32mGrön text\e[0m"); // grönConsole.WriteLine("\e[31mRöd text\e[0m"); // rödConsole.WriteLine("\e[1mFet text\e[0m"); // fetConsole.WriteLine("\e[33m\e[1mGul och fet\e[0m"); // kombineratANSI-koder har formen \e[<kod>m. \e[0m återställer till standardfärg.
// Hjälpmetod för färgade meddelandenstatic string Green(string text) => $"\e[32m{text}\e[0m";static string Red(string text) => $"\e[31m{text}\e[0m";static string Bold(string text) => $"\e[1m{text}\e[0m";
Console.WriteLine(Green("✓ Testet passerade"));Console.WriteLine(Red("✗ Testet misslyckades"));Console.WriteLine(Bold("Viktig information"));ANSI-koder fungerar i moderna terminaler (Windows Terminal, VS Code, macOS Terminal). Den gamla cmd.exe i Windows kan bete sig annorlunda.
TL;DR
Strängar är immutabla — metoder returnerar alltid en ny sträng. Använd interpolation $"" istället för + för läsbara strängar. Använd StringBuilder om du sätter ihop många strängar i en loop.