Sdílet prostřednictvím


Jak oddělit řetězce pomocí String.Split v jazyce C#

Metoda String.Split vytvoří pole podřetězců rozdělením vstupního řetězce na základě jednoho nebo více oddělovačů. Tato metoda je často nejjednodušší způsob, jak oddělit řetězec na hranicích slova. Používá se také k rozdělení řetězců na jiné konkrétní znaky nebo řetězce.

Poznámka:

Příklady jazyka C# v tomto článku se spouštějí v Try.NET inline code runner a playground. Vyberte tlačítko Spustit a spusťte příklad v interaktivním okně. Jakmile kód spustíte, můžete ho upravit a spustit upravený kód tak , že znovu vyberete Spustit . Upravený kód se buď spustí v interaktivním okně, nebo pokud kompilace selže, zobrazí se v interaktivním okně všechny chybové zprávy kompilátoru jazyka C#.

Následující kód rozdělí společnou frázi na pole řetězců pro každé slovo.

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

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

Každá instance znaku oddělovače vytvoří hodnotu ve vrácené matici. Vzhledem k tomu, že pole v jazyce C# jsou indexována nulou, každý řetězec v poli je indexován od 0 do hodnoty vrácené Array.Length vlastností minus 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]}>");
}

Po sobě jdoucí oddělovač vytvoří prázdný řetězec jako hodnotu ve vráceném poli. V následujícím příkladu můžete vidět, jak se vytvoří prázdný řetězec, který jako oddělovač používá znak mezery.

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

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

Toto chování usnadňuje formáty, jako jsou soubory hodnot oddělených čárkami (CSV), které představují tabulková data. Po sobě jdoucí čárky představují prázdný sloupec.

Můžete předat volitelný StringSplitOptions.RemoveEmptyEntries parametr, který vyloučí všechny prázdné řetězce ve vráceném poli. Pro složitější zpracování vrácené kolekce můžete pomocí LINQ manipulovat s posloupností výsledků.

String.Split může používat více znaků oddělovače. Následující příklad používá mezery, čárky, tečky, dvojtečky a tabulátory jako oddělovače znaků, které se předávají Split v poli. Smyčka v dolní části kódu zobrazí všechna slova ve vráceném poli.

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}>");
}

Po sobě jdoucí instance libovolného oddělovače vytvoří prázdný řetězec ve výstupním poli:

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 může vzít pole řetězců (sekvence znaků, které fungují jako oddělovače pro analýzu cílového řetězce místo jednoduchých znaků).

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);
}

Viz také