Share via


Tekenreeksen scheiden met behulp van String.Split in C#

De String.Split methode maakt een matrix met subtekenreeksen door de invoertekenreeks te splitsen op basis van een of meer scheidingstekens. Deze methode is vaak de eenvoudigste manier om een tekenreeks op woordgrenzen te scheiden. Het wordt ook gebruikt om tekenreeksen te splitsen op andere specifieke tekens of tekenreeksen.

Notitie

De C#-voorbeelden in dit artikel worden uitgevoerd in de Try.NET inline coderunner en playground. Selecteer de knop Uitvoeren om een voorbeeld uit te voeren in een interactief venster. Nadat u de code hebt uitgevoerd, kunt u deze wijzigen en de gewijzigde code uitvoeren door Opnieuw uitvoeren te selecteren. De gewijzigde code wordt uitgevoerd in het interactieve venster of, als de compilatie mislukt, worden alle C#-compilerfoutberichten weergegeven.

Met de volgende code wordt een algemene woordgroep gesplitst in een matrix met tekenreeksen voor elk woord.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

Elk exemplaar van een scheidingsteken produceert een waarde in de geretourneerde matrix. Omdat matrices in C# nul geïndexeerd zijn, wordt elke tekenreeks in de matrix geïndexeerd van 0 naar de waarde die wordt geretourneerd door de Array.Length eigenschap min 1:

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

for (int i = 0; i < words.Length; i++)
{
    System.Console.WriteLine($"Index {i}: <{words[i]}>");
}

Opeenvolgende scheidingstekens produceren de lege tekenreeks als een waarde in de geretourneerde matrix. In het volgende voorbeeld ziet u hoe een lege tekenreeks wordt gemaakt, waarbij het spatieteken als scheidingsteken wordt gebruikt.

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

Dit gedrag maakt het eenvoudiger voor indelingen zoals CSV-bestanden (door komma's gescheiden waarden) die tabelgegevens vertegenwoordigen. Opeenvolgende komma's vertegenwoordigen een lege kolom.

U kunt een optionele StringSplitOptions.RemoveEmptyEntries parameter doorgeven om lege tekenreeksen uit te sluiten in de geretourneerde matrix. Voor complexere verwerking van de geretourneerde verzameling kunt u LINQ gebruiken om de resultatenreeks te bewerken.

String.Split kan meerdere scheidingstekens gebruiken. In het volgende voorbeeld worden spaties, komma's, punten, dubbele punten en tabs gebruikt als scheidingstekens, die in een matrix worden doorgegeven Split . In de lus onder aan de code worden alle woorden in de geretourneerde matrix weergegeven.

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

string text = "one\ttwo three:four,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

Opeenvolgende exemplaren van een scheidingsteken produceren de lege tekenreeks in de uitvoermatrix:

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

string text = "one\ttwo :,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

String.Split kan een matrix van tekenreeksen (tekenreeksen die fungeren als scheidingstekens voor het parseren van de doeltekenreeks, in plaats van enkele tekens) gebruiken.

string[] separatingStrings = { "<<", "..." };

string text = "one<<two......three<four";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(separatingStrings, System.StringSplitOptions.RemoveEmptyEntries);
System.Console.WriteLine($"{words.Length} substrings in text:");

foreach (var word in words)
{
    System.Console.WriteLine(word);
}

Zie ook