Jak oddzielić ciągi przy użyciu metody String.Split w języku C#

Metoda String.Split tworzy tablicę podciągów, dzieląc ciąg wejściowy na podstawie co najmniej jednego ogranicznika. Ta metoda jest często najprostszym sposobem oddzielenia ciągu od granic słów. Służy również do dzielenia ciągów na inne określone znaki lub ciągi.

Uwaga

Przykłady języka C# w tym artykule są uruchamiane w Try.NET wbudowanym modułem uruchamiającym kod i placem zabaw. Wybierz przycisk Uruchom, aby uruchomić przykład w oknie interaktywnym. Po wykonaniu kodu można go zmodyfikować i uruchomić zmodyfikowany kod, wybierając pozycję Uruchom ponownie. Zmodyfikowany kod jest uruchamiany w oknie interaktywnym lub, jeśli kompilacja zakończy się niepowodzeniem, w oknie interaktywnym zostaną wyświetlone wszystkie komunikaty o błędach kompilatora języka C#.

Poniższy kod dzieli wspólną frazę na tablicę ciągów dla każdego wyrazu.

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żde wystąpienie znaku separatora generuje wartość w zwracanej tablicy. Ponieważ tablice w języku C# są indeksowane zero, każdy ciąg w tablicy jest indeksowany z zakresu od 0 do wartości zwracanej przez Array.Length właściwość 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]}>");
}

Kolejne znaki separatora generują pusty ciąg jako wartość w zwracanej tablicy. W poniższym przykładzie pokazano, jak jest tworzony pusty ciąg, który używa znaku spacji jako separatora.

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

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

To zachowanie ułatwia formaty, takie jak pliki wartości rozdzielane przecinkami (CSV) reprezentujące dane tabelaryczne. Kolejne przecinki reprezentują pustą kolumnę.

Możesz przekazać opcjonalny StringSplitOptions.RemoveEmptyEntries parametr, aby wykluczyć wszystkie puste ciągi w zwróconej tablicy. W przypadku bardziej skomplikowanego przetwarzania zwróconej kolekcji można użyć LINQ do manipulowania sekwencją wyników.

String.Split może używać wielu znaków separatora. W poniższym przykładzie użyto spacji, przecinków, kropek, dwukropków i tabulatorów jako znaków oddzielających, które są przekazywane do Split tablicy. Pętla w dolnej części kodu wyświetla każdy wyraz w zwróconej tablicy.

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

Kolejne wystąpienia dowolnego separatora generują pusty ciąg w tablicy wyjściowej:

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 może przyjmować tablicę ciągów (sekwencje znaków, które działają jako separatory do analizowania ciągu docelowego, zamiast pojedynczych znaków).

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

Zobacz też