Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Návod
Tento článek je součástí části Základy pro vývojáře, kteří už znají aspoň jeden programovací jazyk a učí se jazyk C#. Pokud s programováním teprve začínáte, začněte nejprve kurzy Začínáme .
Přicházíte z jiného jazyka?string.SplitString.split v C# je obdobou String.prototype.split v Javě a JavaScriptu. Na rozdíl od těchto jazyků vrátí jazyk C# matici (string[]), nikoli seznam, a argument oddělovače je znak nebo řetězec, nikoli regulární výraz. Informace o rozdělení založeném na vzorech najdete v tématu Regex.Split.
Metoda String.Split rozdělí řetězec do pole podřetězců pomocí jednoho nebo více oddělovačů. Je to nejjednodušší způsob, jak analyzovat text s oddělovači, jako jsou slova, hodnoty ve stylu CSV nebo tokeny protokolu.
Metoda má mnoho přetížení, ale pokrývají čtyři nezávislá rozhodnutí:
-
Oddělovače:
char, polechar,stringnebo polestring. - Maximální počet výsledků: omezuje počet vrácených podřetězců.
- Zpracování prázdných položek: ponechat prázdné podřetězce (ve výchozím nastavení) nebo je odstranit pomocí StringSplitOptions.RemoveEmptyEntries.
- Zpracování bílých znaků: ořízněte počáteční a koncové bílé znaky u každé položky pomocí StringSplitOptions.TrimEntries.
Rozdělení řetězce na slova
Pokud chcete rozdělit frázi na prázdné znaky, předejte ' ' ji jako oddělovač:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox>
// => <jumps>
// => <over>
// => <the>
// => <lazy>
// => <dog.>
Procházejte vrácené pole pomocí for, abyste získali zpět pozici každého slova:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
for (int i = 0; i < words.Length; i++)
{
Console.WriteLine($"Index {i}: <{words[i]}>");
}
// => Index 0: <The>
// => Index 1: <quick>
// => Index 2: <brown>
// => ...
Pokud vstup obsahuje opakované instance znaku oddělovače, Split vytvoří prázdné položky, jeden pro každou mezeru mezi po sobě jdoucími oddělovači:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// The runs of spaces produce empty entries:
// => <The>
// => <quick>
// => <brown>
// => <>
// => <>
// => <>
// => <fox>
// => ...
Předejte StringSplitOptions.RemoveEmptyEntries, aby se tyto prázdné položky vynechaly, jak je ukázáno dále v tomto článku.
Rozdělit podle více oddělovacích znaků
Pokud jako oddělovač může fungovat více než jeden znak, předejte je jako pole. Následující příklad považuje mezery, čárky, tečky, dvojtečky a tabulátory za hranice slova:
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <three>
// => <four>
// => <five>
// => <six>
// => <seven>
Sousední oddělovače stále vytvářejí prázdné položky:
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <>
// => <>
// => <five>
// => <six>
// => <seven>
Rozdělit podle víceznakových oddělovačů
Chcete-li rozdělovat podle oddělovačů tvořených celými slovy nebo víceznakových oddělovačů, předejte jako argument pole řetězců. Přetížení řetězcového pole vyžadují StringSplitOptions hodnotu. Použijte RemoveEmptyEntries , pokud by opakované oddělovače jinak vytvářely prázdné výsledky:
string[] separators = ["<<", "..."];
string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");
foreach (var word in words)
{
Console.WriteLine(word);
}
// => 3 substrings in text:
// => one
// => two
// => three<four
Omezení počtu podřetězců, které získáte zpět
count Předejte argument pro omezení počtu výsledků. Poslední položka obsahuje vše, co zbývá, včetně všech zbývajících oddělovačů:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ', 4, StringSplitOptions.None);
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox jumps over the lazy dog.>
Tento vzor je užitečný pro key=value páry a další formáty, kde je smysluplný pouze první oddělovač.
Odstranit bílé znaky z každé položky
StringSplitOptions.TrimEntries odstraňuje počáteční a koncové prázdné znaky z každého vráceného podřetězce. Můžete to zkombinovat s RemoveEmptyEntries pro typické čištění ve stylu CSV:
string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] trimmed = numerals.Split(',', StringSplitOptions.TrimEntries);
Console.WriteLine("Trimmed entries:");
foreach (var word in trimmed)
{
Console.WriteLine($"<{word}>");
}
string[] untrimmed = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in untrimmed)
{
Console.WriteLine($"<{word}>");
}
// => Trimmed entries: <1> <2> ... <10>
// => Untrimmed entries: <1> < 2> ... < 10>
Použití regulárních výrazů
Split funguje dobře pro pevné znakové nebo řetězcové oddělovače. Pro rozdělení založené na vzorech použijte Regex.Split. Úvod k regulárním výrazům v řetězcích najdete v tématu Operace s řetězci.