Hoppa till innehåll

Strängar

↑
Datastrukturer

En sträng innehåller text som en ordnad följd av tecken. En string i C# är oföränderlig. Metoder som verkar ändra innehållet returnerar normalt en ny sträng.

Prova själv

En C#-sträng är oföränderlig. Här visar vi teckenindex.

En C#-sträng är oföränderlig. Här visar vi teckenindex.

Välj ett tecken för att se dess index. Strängen ändras inte.

C# | Strings.cs
string name = "HELLO";
Console.WriteLine(name.Length); // 5 UTF-16-kodenheter
Console.WriteLine(name[1]); // E
string result = name.Replace("L", "R");
Console.WriteLine(name); // Fortfarande HELLO

Om du sammanfogar strängar många gånger i en stor loop kan nya tillfälliga strängobjekt skapas vid varje steg. StringBuilder passar ofta bättre när text byggs upp stegvis.

C# | StringBuilder.cs
var builder = new System.Text.StringBuilder();
foreach (string word in words)
builder.Append(word);
string sentence = builder.ToString();
Operation Typisk komplexitet
Läs en UTF-16-kodenhet via index O(1)
Gå igenom samtliga kodenheter O(n)
Sök efter delsträng Beror på algoritm och implementation
Slå ihop två strängar O(n + m) för att kopiera texten

Unicode innehåller tecken som representeras av flera kodpunkter, och ett synligt tecken kan bestå av flera delar. I .NET räknar string.Length UTF-16-kodenheter, inte alltid tecken som människor uppfattar. I C++ räknar std::string::size() byte. Ingen av dem beskriver automatiskt antalet synliga symboler.

Välj tydligt om jämförelsen ska vara exakt, ignorera versaler och gemener eller följa språkliga regler. Det spelar roll för användarnamn, sökning och filnamn. Unicode-normalisering kan behövas om visuellt identiska strängar har olika representation.

Upprepad konkatenering i en loop kan skapa många nya strängar. I C# kan StringBuilder minska allokeringarna. I C++ kan det hjälpa att reservera kapacitet i std::string.