Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wskazówka
Ten artykuł jest częścią sekcji Podstawy dla deweloperów, którzy już znają co najmniej jeden język programowania i uczą się języka C#. Jeśli dopiero zaczynasz programować, najpierw zacznij od samouczków Wprowadzenie .
Przechodzisz z innego języka?string.Split to odpowiednik elementów String.split w Javie i String.prototype.split w JavaScripcie. W przeciwieństwie do tych języków język C# zwraca tablicę (string[]), a nie listę, a argument separatora jest znakiem lub ciągiem, a nie wyrażeniem regularnym. Aby zapoznać się z podziałem opartym na wzorcu, zobacz Regex.Split.
Metoda String.Split dzieli ciąg na tablicę podciągów przy użyciu co najmniej jednego separatora. Jest to najprostszy sposób analizowania rozdzielanego tekstu, takiego jak wyrazy, wartości w stylu CSV lub tokeny protokołu.
Metoda ma wiele przeciążeń, ale sprowadzają się one do czterech niezależnych wyborów:
-
Separatory: jeden
char, tablica elementówchar, jedenstringlub tablica elementówstring. - Maksymalna liczba wyników: limit liczby zwracanych podciągów.
- Obsługa pustych elementów: zachowuj puste ciągi (domyślnie) lub pomijaj je za pomocą StringSplitOptions.RemoveEmptyEntries.
- Obsługa białych znaków: usuń białe znaki na początku i na końcu w każdym wpisie za pomocą StringSplitOptions.TrimEntries
Dzielenie ciągu na wyrazy
Aby podzielić frazę na białe znaki, przekaż ' ' jako separator:
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.>
Przeiteruj zwróconą tablicę za pomocą for, aby ustalić pozycję każdego słowa:
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>
// => ...
Jeśli dane wejściowe zawierają powtórzone wystąpienia znaku separatora, Split tworzy puste elementy, po jednym dla każdej „przerwy” między kolejnymi separatorami:
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>
// => ...
Przekaż StringSplitOptions.RemoveEmptyEntries , aby usunąć te puste wpisy, jak pokazano w dalszej części tego artykułu.
Dzielenie przy użyciu wielu znaków separatora
Gdy więcej niż jeden znak może służyć jako separator, przekaż je jako tablicę. Poniższy przykład traktuje spacje, przecinki, kropki, dwukropki i tabulatory jako granice wyrazów:
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>
Sąsiadujące separatory nadal generują puste elementy:
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>
Dzielenie przy użyciu separatorów wieloznakowych
Aby podzielić tekst według separatorów będących całymi wyrazami lub separatorów wieloznakowych, przekaż tablicę ciągów znaków. Przeciążenia dla tablicy ciągów znaków wymagają wartości StringSplitOptions. Użyj elementu RemoveEmptyEntries, gdy powtarzające się separatory w przeciwnym razie dawałyby puste wyniki:
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
Ogranicz liczbę zwracanych podciągów
count Przekaż argument, aby ograniczyć liczbę wyników. Ostatni wpis zawiera wszystko, co pozostało, w tym wszelkie pozostałe separatory:
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.>
Ten wzorzec jest przydatny w przypadku key=value par i innych formatów, w których ma znaczenie tylko pierwszy separator.
Usuń białe znaki z każdego elementu
StringSplitOptions.TrimEntries usuwa początkowe i końcowe białe znaki z każdego zwracanego podciągu. Możesz połączyć to z RemoveEmptyEntries, aby wykonać typowe czyszczenie w 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>
Używanie wyrażeń regularnych
Split Działa dobrze w przypadku ograniczników znaków stałych lub ciągów. W przypadku dzielenia opartego na wzorcu użyj polecenia Regex.Split. Aby zapoznać się z informacjami wprowadzającymi o wyrażeniach regularnych dla ciągów znaków, zobacz Operacje na ciągach znaków.