Inhoud van tekenreeks wijzigen in C#

Tip

Dit artikel maakt deel uit van de sectie Grondbeginselen voor ontwikkelaars die al ten minste één programmeertaal kennen en C# leren. Als u nieuw bent in programmeren, begint u eerst met de Aan de slag-handleidingen.

Komt u uit een andere taal? Net als Java en JavaScript zijn C#-tekenreeksen onveranderbaar: methoden zoals Replace en Trim retourneren een nieuwe tekenreeks in plaats van het origineel te wijzigen. De patronen hier lopen parallel aan String methoden in die talen.

Een C# string is onveranderbaar, wat betekent dat de inhoud ervan nooit wordt gewijzigd nadat u deze hebt gemaakt. Elke methode die een tekenreeks lijkt te wijzigen, retourneert daadwerkelijk een nieuwe string met de wijzigingen, waardoor het oorspronkelijke intact blijft. In de voorbeelden in dit artikel worden alle resultaten opgeslagen in een nieuwe variabele, zodat u zowel de bron als de gewijzigde waarde kunt zien.

Kies de techniek die overeenkomt met uw scenario: vervang bekende tekst, trim witruimte, verwijder een reeks tekens, vervang tekst die overeenkomt met een patroon of bewerk afzonderlijke tekens.

Bekende tekst vervangen

De String.Replace methode vervangt elk exemplaar van een tekenreeks door een andere en retourneert het resultaat als een nieuwe tekenreeks:

string source = "The mountains are behind the clouds today.";

// Replace returns a new string; the original is unchanged.
string updated = source.Replace("mountains", "peaks");

Console.WriteLine(source);
// => The mountains are behind the clouds today.
Console.WriteLine(updated);
// => The peaks are behind the clouds today.

De oorspronkelijke tekenreeks is ongewijzigd, wat de onveranderbaarheid demonstreert: Replace hiermee maakt u een nieuwe tekenreeks met de vervanging.

Replace heeft ook een overbelasting die enkele tekens verwisselt. In het volgende voorbeeld wordt elke spatie vervangen door een onderstrepingsteken:

string source = "The mountains are behind the clouds today.";

// Replace every occurrence of one character with another.
string updated = source.Replace(' ', '_');

Console.WriteLine(updated);
// => The_mountains_are_behind_the_clouds_today.

Beide overloads vervangen elke match in de tekenreeks, niet alleen de eerste. Of u nu één teken of een tekenreeks doorgeeft, Replace vervangt alle exemplaren in één aanroep.

Witruimte knippen

Gebruik String.Trim, String.TrimStarten String.TrimEnd verwijder voorloop- of volgspaties. Elke methode retourneert een nieuwe tekenreeks:

string source = "    I'm wider than I need to be.      ";

// Each method returns a new string with whitespace removed.
Console.WriteLine($"<{source.Trim()}>");
// => <I'm wider than I need to be.>
Console.WriteLine($"<{source.TrimStart()}>");
// => <I'm wider than I need to be.      >
Console.WriteLine($"<{source.TrimEnd()}>");
// => <    I'm wider than I need to be.>

Een reeks tekens verwijderen

Met de String.Remove methode worden een aantal tekens verwijderd die beginnen bij een index. Combineer deze met String.IndexOf om de tekst te zoeken die u wilt verwijderen:

string source = "Many mountains are behind many clouds today.";
string toRemove = "many ";

// Find the text, then remove that span by index and length.
int index = source.IndexOf(toRemove);
string result = index >= 0
    ? source.Remove(index, toRemove.Length)
    : source;

Console.WriteLine(result);
// => Many mountains are behind clouds today.

Tekst vervangen die overeenkomt met een patroon

Als u tekst wilt vervangen die een patroon volgt in plaats van een exacte tekenreeks, gebruikt u reguliere expressies. De Regex.Replace methode accepteert een functie waarmee elke vervanging wordt berekend, zodat u details zoals het oorspronkelijke hoofdlettergebruik kunt behouden. Het patroon the\s komt overeen met 'the' gevolgd door een witruimteteken, waardoor het niet overeenkomt met 'daar':

string source = "The mountains are still there behind the clouds today.";

// Replace "the" or "The" followed by whitespace, preserving the original case.
// The \s in the pattern keeps "there" from matching.
string result = Regex.Replace(
    source,
    """the\s""",
    match => char.IsUpper(match.Value[0]) ? "Many " : "many ",
    RegexOptions.IgnoreCase);

Console.WriteLine(result);
// => Many mountains are still there behind many clouds today.

Zie Zoekreeksen in C# voor zoeken op basis van patronen in plaats van vervanging. Zie Beknopte naslaggids voor de taal van reguliere expressies voor de syntaxis van reguliere expressies.

Afzonderlijke tekens wijzigen

Als u tekens op positie wilt wijzigen, kopieert u de tekenreeks naar een van de Span<T> tekens, wijzigt u de spanwijdte en bouwt u er vervolgens een nieuwe tekenreeks van. In het volgende voorbeeld wordt het woord 'fox' gevonden en vervangen door 'kat':

string phrase = "The quick brown fox jumps over the fence.";

// A string is immutable, so copy it into a Span<char> to edit in place.
Span<char> characters = stackalloc char[phrase.Length];
phrase.CopyTo(characters);
int index = phrase.IndexOf("fox");
if (index != -1)
{
    characters[index] = 'c';
    characters[index + 1] = 'a';
    characters[index + 2] = 't';
}

// Build a new string from the modified characters.
string updated = new string(characters);
Console.WriteLine(updated);
// => The quick brown cat jumps over the fence.

Voor scenario's met hoge prestaties die tussenliggende toewijzingen voorkomen, biedt de runtime API's op lager niveau, zoals String.Create. Deze technieken zijn geavanceerd; voor dagelijkse code zijn de methoden in dit artikel de juiste keuze.

Zie ook