String.Split Метод

Определение

Возвращает строковый массив, содержащий подстроки данного экземпляра, разделенные элементами заданной строки или массива знаков Юникода.

Перегрузки

Split(Char, Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанного символа-разделителя и, при необходимости, параметров. Разбивает строку на максимальное число подстрок на основе указанного разделителя символов, при необходимости исключая пустые подстроки из результата.

Split(String[], Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанных строк-разделителей и, при необходимости, параметров.

Split(Char[], Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанных символов-разделителей и, при необходимости, параметров.

Split(String[], StringSplitOptions)

Разбивает строку на подстроки на основе указанных строк-разделителей и, при необходимости, параметров.

Split(String, Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанной строки-разделителя и, при необходимости, параметров.

Split(Char[], StringSplitOptions)

Разбивает строку на подстроки на основе указанных символов-разделителей и параметров.

Split(Char[], Int32)

Разбивает строку на максимальное число подстрок на основе указанных символов-разделителей.

Split(Char, StringSplitOptions)

Разбивает строку на подстроки на основе указанного символа-разделителя и, при необходимости, параметров.

Split(String, StringSplitOptions)

Разделяет строку на подстроки в соответствии с указанной строкой-разделителем.

Split(Char[])

Разбивает строку на подстроки на основе указанных символов-разделителей.

Комментарии

Split используется для разбиения строки с разделителями на подстроки. Можно использовать либо массив символов, либо массив строк, чтобы указать ноль или несколько символов или строк. Если символы-разделители не указаны, строка разбивается по символам пробела.

Перегрузки Split метода позволяют ограничить количество подстрок, возвращаемых методом ( Split(Char[], Int32) метод), указать, следует ли включать пустые строки и/или усекать подстроки в результатах ( Split(Char[], StringSplitOptions) Split(String[], StringSplitOptions) методы и) или для обоих Split(Char[], Int32, StringSplitOptions) методов ( Split(String[], Int32, StringSplitOptions) методы и).

Совет

SplitМетод не всегда является лучшим способом разбивать строку с разделителями на подстроки. Если вы не хотите извлекать все подстроки из строки с разделителями или хотите проанализировать строку на основе шаблона вместо набора символов-разделителей, рассмотрите возможность использования регулярных выражений или объедините один из методов поиска, который возвращает индекс символа с помощью Substring метода. Дополнительные сведения см. в разделе Извлечение подстрок из строки.

Пример

Ниже показаны три различные перегрузки String.Split(). Первый пример вызывает Split(Char[]) перегрузку и передается в один разделитель.

string s = "You win some. You lose some.";

string[] subs = s.Split(' ');

foreach (var sub in subs)
{
    Console.WriteLine($"Substring: {sub}");
}

// This example produces the following output:
//
// Substring: You
// Substring: win
// Substring: some.
// Substring: You
// Substring: lose
// Substring: some.
Dim s As String = "You win some. You lose some."
Dim subs As String() = s.Split()

For Each substring As String In subs
    Console.WriteLine($"Substring: {substring}")
Next

' This example produces the following output:
'
' Substring: You
' Substring: win
' Substring: some.
' Substring: You
' Substring: lose
' Substring: some.

Как видите, символы-точки (.) содержатся в двух подстроках. Если вы хотите исключить символы-точки, добавьте символ-точку как дополнительный символ разделителя. В следующем примере показано, как это сделать.

string s = "You win some. You lose some.";

string[] subs = s.Split(' ', '.');

foreach (var sub in subs)
{
    Console.WriteLine($"Substring: {sub}");
}

// This example produces the following output:
//
// Substring: You
// Substring: win
// Substring: some
// Substring:
// Substring: You
// Substring: lose
// Substring: some
// Substring:
Dim s As String = "You win some. You lose some."
Dim subs As String() = s.Split(" "c, "."c)

For Each substring As String In subs
    Console.WriteLine($"Substring: {substring}")
Next

' This example produces the following output:
'
' Substring: You
' Substring: win
' Substring: some
' Substring:
' Substring: You
' Substring: lose
' Substring: some
' Substring:

Точки исчезли из подстрок, однако теперь появились две дополнительные пустые подстроки. Эти пустые подстроки представляют подстроку между словом и периодом после него. Чтобы исключить из результирующего массива пустые подстроки, вызовите перегрузку Split(Char[], StringSplitOptions) и укажите StringSplitOptions.RemoveEmptyEntries для параметра options.

string s = "You win some. You lose some.";
char[] separators = new char[] { ' ', '.' };

string[] subs = s.Split(separators, StringSplitOptions.RemoveEmptyEntries);

foreach (var sub in subs)
{
    Console.WriteLine($"Substring: {sub}");
}

// This example produces the following output:
//
// Substring: You
// Substring: win
// Substring: some
// Substring: You
// Substring: lose
// Substring: some
Dim s As String = "You win some. You lose some."
Dim separators As Char() = New Char() {" "c, "."c}
Dim subs As String() = s.Split(separators, StringSplitOptions.RemoveEmptyEntries)

For Each substring As String In subs
    Console.WriteLine($"Substring: {substring}")
Next

' This example produces the following output:
'
' Substring: You
' Substring: win
' Substring: some
' Substring: You
' Substring: lose
' Substring: some

В разделах для отдельных перегрузок String.Split() содержатся дополнительные примеры.

Split(Char, Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанного символа-разделителя и, при необходимости, параметров. Разбивает строку на максимальное число подстрок на основе указанного разделителя символов, при необходимости исключая пустые подстроки из результата.

public string[] Split (char separator, int count, StringSplitOptions options = System.StringSplitOptions.None);
member this.Split : char * int * StringSplitOptions -> string[]
Public Function Split (separator As Char, count As Integer, Optional options As StringSplitOptions = System.StringSplitOptions.None) As String()

Параметры

separator
Char

Символ, разделяющий подстроки в этом экземпляре.

count
Int32

Максимальное количество элементов в массиве.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, содержащий подстроки из этого экземпляра (не более count), разделенные символом separator.

Комментарии

Если строка уже была разбита count на 1 раз, но конец строки не был достигнут, последняя строка в возвращенном массиве будет содержать оставшуюся конечную подстроку этого экземпляра без изменений.

Применяется к

Split(String[], Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанных строк-разделителей и, при необходимости, параметров.

public:
 cli::array <System::String ^> ^ Split(cli::array <System::String ^> ^ separator, int count, StringSplitOptions options);
public string[] Split (string[] separator, int count, StringSplitOptions options);
public string[] Split (string[]? separator, int count, StringSplitOptions options);
[System.Runtime.InteropServices.ComVisible(false)]
public string[] Split (string[] separator, int count, StringSplitOptions options);
member this.Split : string[] * int * StringSplitOptions -> string[]
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.Split : string[] * int * StringSplitOptions -> string[]
Public Function Split (separator As String(), count As Integer, options As StringSplitOptions) As String()

Параметры

separator
String[]

Строки, разделяющие подстроки в данной строке, пустой массив, не содержащий разделителей, или null.

count
Int32

Максимальное число возвращаемых подстрок.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, элементы которого содержат подстроки данной строки, разделенные одной или более строками из separator. Дополнительные сведения см. в разделе "Примечания".

Атрибуты

Исключения

count является отрицательным значением.

options не является одним из значений StringSplitOptions.

Примеры

В следующем примере StringSplitOptions перечисление используется для включения или исключения подстрок, созданных Split методом.

// This example demonstrates the String.Split(Char[], Boolean) and 
//                               String.Split(Char[], Int32, Boolean) methods
using namespace System;
void Show( array<String^>^entries )
{
   Console::WriteLine( "The return value contains these {0} elements:", entries->Length );
   System::Collections::IEnumerator^ myEnum = entries->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ entry = safe_cast<String^>(myEnum->Current);
      Console::Write( "<{0}>", entry );
   }

   Console::Write( "{0}{0}", Environment::NewLine );
}

int main()
{
   String^ s = ",one,,,two,,,,,three,,";
   array<Char>^sep = gcnew array<Char>{
      ','
   };
   array<String^>^result;
   
   //
   Console::WriteLine( "The original string is \"{0}\".", s );
   Console::WriteLine( "The separation character is '{0}'.", sep[ 0 ] );
   Console::WriteLine();
   
   //
   Console::WriteLine( "Split the string and return all elements:" );
   result = s->Split( sep, StringSplitOptions::None );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return all non-empty elements:" );
   result = s->Split( sep, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return 2 elements:" );
   result = s->Split( sep, 2, StringSplitOptions::None );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return 2 non-empty elements:" );
   result = s->Split( sep, 2, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
}

/*
This example produces the following results:

The original string is ",one,,,two,,,,,three,,".
The separation character is ','.

Split the string and return all elements:
The return value contains these 12 elements:
<><one><><><two><><><><><three><><>

Split the string and return all non-empty elements:
The return value contains these 3 elements:
<one><two><three>

Split the string and return 2 elements:
The return value contains these 2 elements:
<><one,,,two,,,,,three,,>

Split the string and return 2 non-empty elements:
The return value contains these 2 elements:
<one><,,two,,,,,three,,>

*/
// This example demonstrates the String.Split() methods that use
// the StringSplitOptions enumeration.
string s1 = ",ONE,,TWO,,,THREE,,";
string s2 = "[stop]" +
            "ONE[stop][stop]" +
            "TWO[stop][stop][stop]" +
            "THREE[stop][stop]";
char[] charSeparators = new char[] { ',' };
string[] stringSeparators = new string[] { "[stop]" };
string[] result;
// ------------------------------------------------------------------------------
// Split a string delimited by characters.
// ------------------------------------------------------------------------------
Console.WriteLine("1) Split a string delimited by characters:\n");

// Display the original string and delimiter characters.
Console.WriteLine($"1a) The original string is \"{s1}\".");
Console.WriteLine($"The delimiter character is '{charSeparators[0]}'.\n");

// Split a string delimited by characters and return all elements.
Console.WriteLine("1b) Split a string delimited by characters and " +
                  "return all elements:");
result = s1.Split(charSeparators, StringSplitOptions.None);
Show(result);

// Split a string delimited by characters and return all non-empty elements.
Console.WriteLine("1c) Split a string delimited by characters and " +
                  "return all non-empty elements:");
result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Split the original string into the string and empty string before the
// delimiter and the remainder of the original string after the delimiter.
Console.WriteLine("1d) Split a string delimited by characters and " +
                  "return 2 elements:");
result = s1.Split(charSeparators, 2, StringSplitOptions.None);
Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
Console.WriteLine("1e) Split a string delimited by characters and " +
                  "return 2 non-empty elements:");
result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// ------------------------------------------------------------------------------
// Split a string delimited by another string.
// ------------------------------------------------------------------------------
Console.WriteLine("2) Split a string delimited by another string:\n");

// Display the original string and delimiter string.
Console.WriteLine($"2a) The original string is \"{s2}\".");
Console.WriteLine($"The delimiter string is \"{stringSeparators[0]}\".\n");

// Split a string delimited by another string and return all elements.
Console.WriteLine("2b) Split a string delimited by another string and " +
                  "return all elements:");
result = s2.Split(stringSeparators, StringSplitOptions.None);
Show(result);

// Split the original string at the delimiter and return all non-empty elements.
Console.WriteLine("2c) Split a string delimited by another string and " +
                  "return all non-empty elements:");
result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Split the original string into the empty string before the
// delimiter and the remainder of the original string after the delimiter.
Console.WriteLine("2d) Split a string delimited by another string and " +
                  "return 2 elements:");
result = s2.Split(stringSeparators, 2, StringSplitOptions.None);
Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
Console.WriteLine("2e) Split a string delimited by another string and " +
                  "return 2 non-empty elements:");
result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Display the array of separated strings using a local function
void Show(string[] entries)
{
    Console.WriteLine($"The return value contains these {entries.Length} elements:");
    foreach (string entry in entries)
    {
        Console.Write($"<{entry}>");
    }
    Console.Write("\n\n");
}

/*
This example produces the following results:

1) Split a string delimited by characters:

1a) The original string is ",ONE,,TWO,,,THREE,,".
The delimiter character is ','.

1b) Split a string delimited by characters and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

1c) Split a string delimited by characters and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

1d) Split a string delimited by characters and return 2 elements:
The return value contains these 2 elements:
<><ONE,,TWO,,,THREE,,>

1e) Split a string delimited by characters and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO,,,THREE,,>

2) Split a string delimited by another string:

2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
The delimiter string is "[stop]".

2b) Split a string delimited by another string and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

2c) Split a string delimited by another string and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

2d) Split a string delimited by another string and return 2 elements:
The return value contains these 2 elements:
<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>

2e) Split a string delimited by another string and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO[stop][stop][stop]THREE[stop][stop]>

*/
    Dim s1 As String = ",ONE,,TWO,,,THREE,,"
    Dim s2 As String = "[stop]" &
                       "ONE[stop][stop]" &
                       "TWO[stop][stop][stop]" &
                       "THREE[stop][stop]"
    Dim charSeparators() As Char = {","c}
    Dim stringSeparators() As String = {"[stop]"}
    Dim result() As String
    ' ------------------------------------------------------------------------------
    ' Split a string delimited by characters.
    ' ------------------------------------------------------------------------------
    Console.WriteLine("1) Split a string delimited by characters:" & vbCrLf)

    ' Display the original string and delimiter characters.
    Console.WriteLine("1a) The original string is ""{0}"".", s1)
    Console.WriteLine("The delimiter character is '{0}'." & vbCrLf, charSeparators(0))

    ' Split a string delimited by characters and return all elements.
    Console.WriteLine("1b) Split a string delimited by characters and " &
                      "return all elements:")
    result = s1.Split(charSeparators, StringSplitOptions.None)
    Show(result)

    ' Split a string delimited by characters and return all non-empty elements.
    Console.WriteLine("1c) Split a string delimited by characters and " &
                      "return all non-empty elements:")
    result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' Split the original string into the string and empty string before the 
    ' delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("1d) Split a string delimited by characters and " &
                      "return 2 elements:")
    result = s1.Split(charSeparators, 2, StringSplitOptions.None)
    Show(result)

    ' Split the original string into the string after the delimiter and the 
    ' remainder of the original string after the delimiter.
    Console.WriteLine("1e) Split a string delimited by characters and " &
                      "return 2 non-empty elements:")
    result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' ------------------------------------------------------------------------------
    ' Split a string delimited by another string.
    ' ------------------------------------------------------------------------------
    Console.WriteLine("2) Split a string delimited by another string:" & vbCrLf)

    ' Display the original string and delimiter string.
    Console.WriteLine("2a) The original string is ""{0}"".", s2)
    Console.WriteLine("The delimiter string is ""{0}""." & vbCrLf, stringSeparators(0))

    ' Split a string delimited by another string and return all elements.
    Console.WriteLine("2b) Split a string delimited by another string and " &
                      "return all elements:")
    result = s2.Split(stringSeparators, StringSplitOptions.None)
    Show(result)

    ' Split the original string at the delimiter and return all non-empty elements.
    Console.WriteLine("2c) Split a string delimited by another string and " &
                      "return all non-empty elements:")
    result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' Split the original string into the empty string before the 
    ' delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("2d) Split a string delimited by another string and " &
                      "return 2 elements:")
    result = s2.Split(stringSeparators, 2, StringSplitOptions.None)
    Show(result)

    ' Split the original string into the string after the delimiter and the 
    ' remainder of the original string after the delimiter.
    Console.WriteLine("2e) Split a string delimited by another string and " &
                      "return 2 non-empty elements:")
    result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

End Sub


' Display the array of separated strings.
Public Shared Sub Show(ByVal entries() As String)
    Console.WriteLine("The return value contains these {0} elements:", entries.Length)
    Dim entry As String
    For Each entry In entries
        Console.Write("<{0}>", entry)
    Next entry
    Console.Write(vbCrLf & vbCrLf)

End Sub

'This example produces the following results:
'
'1) Split a string delimited by characters:
'
'1a) The original string is ",ONE,,TWO,,,THREE,,".
'The delimiter character is ','.
'
'1b) Split a string delimited by characters and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'1c) Split a string delimited by characters and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'1d) Split a string delimited by characters and return 2 elements:
'The return value contains these 2 elements:
'<><ONE,,TWO,,,THREE,,>
'
'1e) Split a string delimited by characters and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO,,,THREE,,>
'
'2) Split a string delimited by another string:
'
'2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'The delimiter string is "[stop]".
'
'2b) Split a string delimited by another string and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'2c) Split a string delimited by another string and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'2d) Split a string delimited by another string and return 2 elements:
'The return value contains these 2 elements:
'<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>
'
'2e) Split a string delimited by another string and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO[stop][stop][stop]THREE[stop][stop]>
'

Комментарии

Строки разделителей не включаются в элементы возвращаемого массива.

Если этот экземпляр не содержит ни одной строки в separator или count параметр равен 1, возвращаемый массив состоит из одного элемента, содержащего этот экземпляр.

Если separator параметр имеет значение null или не содержит символов, то символы пробела считаются разделителями. Символы пробела определяются стандартом Юникода, а Char.IsWhiteSpace метод возвращает, true если они передаются в него.

Для передачи null string[] separator параметра необходимо указать тип null для устранения неоднозначности вызова из других перегрузок, таких как Split(Char[], Int32, StringSplitOptions) . В следующем примере показано несколько способов однозначного определения этой перегрузки.

string phrase = "The quick  brown fox";

_ = phrase.Split(default(string[]), 3, StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split((string[])null, 3, StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split(null as string[], 3, StringSplitOptions.RemoveEmptyEntries);
Dim phrase As String = "The quick brown fox"
Dim words() As String

words = phrase.Split(TryCast(Nothing, String()), 3,
                       StringSplitOptions.RemoveEmptyEntries)

words = phrase.Split(New String() {}, 3,
                     StringSplitOptions.RemoveEmptyEntries)

Если count параметр равен нулю или options параметр имеет значение RemoveEmptyEntries , а длина этого экземпляра равна нулю, возвращается пустой массив.

Каждый элемент separator определяет отдельный разделитель, состоящий из одного или нескольких символов. Если options параметр имеет значение None , а два разделителя являются смежными или разделитель находится в начале или в конце данного экземпляра, соответствующий элемент массива содержит Empty .

Если count в этом экземпляре больше подстрок, то первый минус 1 count подстрока возвращается в первые count меньше 1 элементов возвращаемого значения, а остальные символы в этом экземпляре возвращаются в последнем элементе возвращаемого значения.

Если count больше числа подстрок, возвращаются доступные подстроки и исключение не создается.

Массив разделителя

Если любой из элементов separator состоит из нескольких символов, вся подстрока считается разделителем. Например, если один из элементов separator имеет значение "10", попытка разделить строку "This10is10a10string". Возвращает этот массив из четырех элементов: {"this", "имеет значение", "a", "строка". }.

Сведения о сравнении

SplitМетод извлекает подстроки в этой строке, разделенные одной или несколькими строками в separator параметре, и возвращает эти подстроки как элементы массива.

SplitМетод ищет разделители, выполняя сравнения, используя правила сортировки порядковых номеров с учетом регистра. Дополнительные сведения о сортировке по словам, строкам и порядковым номерам см. в разделе System.Globalization.CompareOptions перечисление.

SplitМетод игнорирует любой элемент separator , значение которого равно или является null пустой строкой ("").

Чтобы избежать неоднозначных результатов, когда строки в separator имеют общие символы, Split метод переходит от начала до конца значения экземпляра и соответствует первому элементу в separator , который равен разделителю в экземпляре. Порядок, в котором подстроки встречаются в экземпляре, имеет приоритет над порядком элементов в separator .

Например, рассмотрим экземпляр, значение которого равно «abcdef». Если первый элемент в имел значение " separator EF", а второй элемент — "bcde", результатом операции разбиения будет "a" и "f". Это обусловлено тем, что обнаружена подстрока в экземпляре "bcde", и она соответствует элементу separator до обнаружения подстроки "f".

Однако если первый элемент имел значение " separator BCD", а второй элемент — "BC", результатом операции разбиения будет "a" и "EF". Это происходит потому, что "BCD" является первым разделителем в separator , который соответствует разделителю в экземпляре. Если порядок разделителей был реверсирован, так что первый элемент был "BC", а второй элемент — "BCD", результатом будет "a" и "def".

Особенности производительности

SplitМетоды выделяют память для возвращаемого объекта массива и String объекта для каждого элемента массива. Если для приложения требуется оптимальная производительность или управление выделением памяти является критически важным в приложении, рассмотрите возможность использования IndexOf IndexOfAny метода или и, при необходимости, Compare метода, чтобы нахождение подстроки в строке.

При разделении строки на символ-разделитель используйте IndexOf IndexOfAny метод или для нахождение символа разделителя в строке. При разделении строки в строке-разделителе используйте IndexOf IndexOfAny метод или для нахождение первого символа строки разделителя. Затем используйте Compare метод, чтобы определить, равны ли символы, указанные после первого символа, оставшимся символам строки разделителя.

Кроме того, если для разделения строк в нескольких вызовах методов используется один и тот же набор символов Split , рассмотрите возможность создания одного массива и ссылки на него в каждом вызове метода. Это значительно сокращает дополнительную нагрузку на каждый вызов метода.

Примечания для тех, кто вызывает этот метод

в платформа .NET Framework 3,5 и более ранних версиях, если Split(Char[]) методу передается значение separator , равное null или не содержащее символов, метод использует немного другой набор символов пробела, чтобы разделить строку, чем Trim(Char[]) метод, чтобы обрезать строку. начиная с платформа .NET Framework 4, оба метода используют идентичный набор пробельных символов юникода.

Применяется к

Split(Char[], Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанных символов-разделителей и, при необходимости, параметров.

public:
 cli::array <System::String ^> ^ Split(cli::array <char> ^ separator, int count, StringSplitOptions options);
public string[] Split (char[] separator, int count, StringSplitOptions options);
public string[] Split (char[]? separator, int count, StringSplitOptions options);
[System.Runtime.InteropServices.ComVisible(false)]
public string[] Split (char[] separator, int count, StringSplitOptions options);
member this.Split : char[] * int * StringSplitOptions -> string[]
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.Split : char[] * int * StringSplitOptions -> string[]
Public Function Split (separator As Char(), count As Integer, options As StringSplitOptions) As String()

Параметры

separator
Char[]

Массив символов, разделяющих подстроки в данной строке, пустой массив, не содержащий разделителей, или null.

count
Int32

Максимальное число возвращаемых подстрок.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, содержащий подстроки данной строки, разделенные одним или несколькими символами из separator. Дополнительные сведения см. в разделе "Примечания".

Атрибуты

Исключения

count является отрицательным значением.

options не является одним из значений StringSplitOptions.

Примеры

В следующем примере StringSplitOptions перечисление используется для включения или исключения подстрок, созданных Split методом.

// This example demonstrates the String.Split(Char[], Boolean) and 
//                               String.Split(Char[], Int32, Boolean) methods
using namespace System;
void Show( array<String^>^entries )
{
   Console::WriteLine( "The return value contains these {0} elements:", entries->Length );
   System::Collections::IEnumerator^ myEnum = entries->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ entry = safe_cast<String^>(myEnum->Current);
      Console::Write( "<{0}>", entry );
   }

   Console::Write( "{0}{0}", Environment::NewLine );
}

int main()
{
   String^ s = ",one,,,two,,,,,three,,";
   array<Char>^sep = gcnew array<Char>{
      ','
   };
   array<String^>^result;
   
   //
   Console::WriteLine( "The original string is \"{0}\".", s );
   Console::WriteLine( "The separation character is '{0}'.", sep[ 0 ] );
   Console::WriteLine();
   
   //
   Console::WriteLine( "Split the string and return all elements:" );
   result = s->Split( sep, StringSplitOptions::None );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return all non-empty elements:" );
   result = s->Split( sep, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return 2 elements:" );
   result = s->Split( sep, 2, StringSplitOptions::None );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return 2 non-empty elements:" );
   result = s->Split( sep, 2, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
}

/*
This example produces the following results:

The original string is ",one,,,two,,,,,three,,".
The separation character is ','.

Split the string and return all elements:
The return value contains these 12 elements:
<><one><><><two><><><><><three><><>

Split the string and return all non-empty elements:
The return value contains these 3 elements:
<one><two><three>

Split the string and return 2 elements:
The return value contains these 2 elements:
<><one,,,two,,,,,three,,>

Split the string and return 2 non-empty elements:
The return value contains these 2 elements:
<one><,,two,,,,,three,,>

*/
// This example demonstrates the String.Split() methods that use
// the StringSplitOptions enumeration.
string s1 = ",ONE,,TWO,,,THREE,,";
string s2 = "[stop]" +
            "ONE[stop][stop]" +
            "TWO[stop][stop][stop]" +
            "THREE[stop][stop]";
char[] charSeparators = new char[] { ',' };
string[] stringSeparators = new string[] { "[stop]" };
string[] result;
// ------------------------------------------------------------------------------
// Split a string delimited by characters.
// ------------------------------------------------------------------------------
Console.WriteLine("1) Split a string delimited by characters:\n");

// Display the original string and delimiter characters.
Console.WriteLine($"1a) The original string is \"{s1}\".");
Console.WriteLine($"The delimiter character is '{charSeparators[0]}'.\n");

// Split a string delimited by characters and return all elements.
Console.WriteLine("1b) Split a string delimited by characters and " +
                  "return all elements:");
result = s1.Split(charSeparators, StringSplitOptions.None);
Show(result);

// Split a string delimited by characters and return all non-empty elements.
Console.WriteLine("1c) Split a string delimited by characters and " +
                  "return all non-empty elements:");
result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Split the original string into the string and empty string before the
// delimiter and the remainder of the original string after the delimiter.
Console.WriteLine("1d) Split a string delimited by characters and " +
                  "return 2 elements:");
result = s1.Split(charSeparators, 2, StringSplitOptions.None);
Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
Console.WriteLine("1e) Split a string delimited by characters and " +
                  "return 2 non-empty elements:");
result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// ------------------------------------------------------------------------------
// Split a string delimited by another string.
// ------------------------------------------------------------------------------
Console.WriteLine("2) Split a string delimited by another string:\n");

// Display the original string and delimiter string.
Console.WriteLine($"2a) The original string is \"{s2}\".");
Console.WriteLine($"The delimiter string is \"{stringSeparators[0]}\".\n");

// Split a string delimited by another string and return all elements.
Console.WriteLine("2b) Split a string delimited by another string and " +
                  "return all elements:");
result = s2.Split(stringSeparators, StringSplitOptions.None);
Show(result);

// Split the original string at the delimiter and return all non-empty elements.
Console.WriteLine("2c) Split a string delimited by another string and " +
                  "return all non-empty elements:");
result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Split the original string into the empty string before the
// delimiter and the remainder of the original string after the delimiter.
Console.WriteLine("2d) Split a string delimited by another string and " +
                  "return 2 elements:");
result = s2.Split(stringSeparators, 2, StringSplitOptions.None);
Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
Console.WriteLine("2e) Split a string delimited by another string and " +
                  "return 2 non-empty elements:");
result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Display the array of separated strings using a local function
void Show(string[] entries)
{
    Console.WriteLine($"The return value contains these {entries.Length} elements:");
    foreach (string entry in entries)
    {
        Console.Write($"<{entry}>");
    }
    Console.Write("\n\n");
}

/*
This example produces the following results:

1) Split a string delimited by characters:

1a) The original string is ",ONE,,TWO,,,THREE,,".
The delimiter character is ','.

1b) Split a string delimited by characters and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

1c) Split a string delimited by characters and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

1d) Split a string delimited by characters and return 2 elements:
The return value contains these 2 elements:
<><ONE,,TWO,,,THREE,,>

1e) Split a string delimited by characters and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO,,,THREE,,>

2) Split a string delimited by another string:

2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
The delimiter string is "[stop]".

2b) Split a string delimited by another string and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

2c) Split a string delimited by another string and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

2d) Split a string delimited by another string and return 2 elements:
The return value contains these 2 elements:
<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>

2e) Split a string delimited by another string and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO[stop][stop][stop]THREE[stop][stop]>

*/
    Dim s1 As String = ",ONE,,TWO,,,THREE,,"
    Dim s2 As String = "[stop]" &
                       "ONE[stop][stop]" &
                       "TWO[stop][stop][stop]" &
                       "THREE[stop][stop]"
    Dim charSeparators() As Char = {","c}
    Dim stringSeparators() As String = {"[stop]"}
    Dim result() As String
    ' ------------------------------------------------------------------------------
    ' Split a string delimited by characters.
    ' ------------------------------------------------------------------------------
    Console.WriteLine("1) Split a string delimited by characters:" & vbCrLf)

    ' Display the original string and delimiter characters.
    Console.WriteLine("1a) The original string is ""{0}"".", s1)
    Console.WriteLine("The delimiter character is '{0}'." & vbCrLf, charSeparators(0))

    ' Split a string delimited by characters and return all elements.
    Console.WriteLine("1b) Split a string delimited by characters and " &
                      "return all elements:")
    result = s1.Split(charSeparators, StringSplitOptions.None)
    Show(result)

    ' Split a string delimited by characters and return all non-empty elements.
    Console.WriteLine("1c) Split a string delimited by characters and " &
                      "return all non-empty elements:")
    result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' Split the original string into the string and empty string before the 
    ' delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("1d) Split a string delimited by characters and " &
                      "return 2 elements:")
    result = s1.Split(charSeparators, 2, StringSplitOptions.None)
    Show(result)

    ' Split the original string into the string after the delimiter and the 
    ' remainder of the original string after the delimiter.
    Console.WriteLine("1e) Split a string delimited by characters and " &
                      "return 2 non-empty elements:")
    result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' ------------------------------------------------------------------------------
    ' Split a string delimited by another string.
    ' ------------------------------------------------------------------------------
    Console.WriteLine("2) Split a string delimited by another string:" & vbCrLf)

    ' Display the original string and delimiter string.
    Console.WriteLine("2a) The original string is ""{0}"".", s2)
    Console.WriteLine("The delimiter string is ""{0}""." & vbCrLf, stringSeparators(0))

    ' Split a string delimited by another string and return all elements.
    Console.WriteLine("2b) Split a string delimited by another string and " &
                      "return all elements:")
    result = s2.Split(stringSeparators, StringSplitOptions.None)
    Show(result)

    ' Split the original string at the delimiter and return all non-empty elements.
    Console.WriteLine("2c) Split a string delimited by another string and " &
                      "return all non-empty elements:")
    result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' Split the original string into the empty string before the 
    ' delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("2d) Split a string delimited by another string and " &
                      "return 2 elements:")
    result = s2.Split(stringSeparators, 2, StringSplitOptions.None)
    Show(result)

    ' Split the original string into the string after the delimiter and the 
    ' remainder of the original string after the delimiter.
    Console.WriteLine("2e) Split a string delimited by another string and " &
                      "return 2 non-empty elements:")
    result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

End Sub


' Display the array of separated strings.
Public Shared Sub Show(ByVal entries() As String)
    Console.WriteLine("The return value contains these {0} elements:", entries.Length)
    Dim entry As String
    For Each entry In entries
        Console.Write("<{0}>", entry)
    Next entry
    Console.Write(vbCrLf & vbCrLf)

End Sub

'This example produces the following results:
'
'1) Split a string delimited by characters:
'
'1a) The original string is ",ONE,,TWO,,,THREE,,".
'The delimiter character is ','.
'
'1b) Split a string delimited by characters and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'1c) Split a string delimited by characters and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'1d) Split a string delimited by characters and return 2 elements:
'The return value contains these 2 elements:
'<><ONE,,TWO,,,THREE,,>
'
'1e) Split a string delimited by characters and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO,,,THREE,,>
'
'2) Split a string delimited by another string:
'
'2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'The delimiter string is "[stop]".
'
'2b) Split a string delimited by another string and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'2c) Split a string delimited by another string and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'2d) Split a string delimited by another string and return 2 elements:
'The return value contains these 2 elements:
'<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>
'
'2e) Split a string delimited by another string and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO[stop][stop][stop]THREE[stop][stop]>
'

Комментарии

Символы разделителей не включаются в элементы возвращаемого массива.

Если этот экземпляр не содержит символов в separator или count параметр равен 1, возвращаемый массив состоит из одного элемента, содержащего этот экземпляр.

Если separator параметр имеет значение null или не содержит символов, то символы пробела считаются разделителями. Символы пробела определяются стандартом Юникода, а Char.IsWhiteSpace метод возвращает, true если они передаются в него.

Для передачи null char[] separator параметра необходимо указать тип null для устранения неоднозначности вызова из других перегрузок, таких как Split(String[], Int32, StringSplitOptions) . В следующем примере показано несколько способов однозначного определения этой перегрузки.

string phrase = "The quick  brown fox";

_ = phrase.Split(default(char[]), 3, StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split((char[])null, 3, StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split(null as char[], 3, StringSplitOptions.RemoveEmptyEntries);
Dim phrase As String = "The quick brown fox"
Dim words() As String

words = phrase.Split(TryCast(Nothing, Char()), 3,
                       StringSplitOptions.RemoveEmptyEntries)

words = phrase.Split(New Char() {}, 3,
                     StringSplitOptions.RemoveEmptyEntries)

Если count параметр равен нулю или options параметр имеет значение RemoveEmptyEntries , а длина этого экземпляра равна нулю, возвращается пустой массив.

Каждый элемент separator определяет отдельный символ-разделитель. Если options параметр имеет значение None , а два разделителя являются смежными или разделитель находится в начале или в конце данного экземпляра, соответствующий элемент массива содержит Empty .

Если count в этом экземпляре больше подстрок, то первый минус 1 count подстрока возвращается в первые count меньше 1 элементов возвращаемого значения, а остальные символы в этом экземпляре возвращаются в последнем элементе возвращаемого значения.

Если count больше числа подстрок, возвращаются доступные подстроки и исключение не создается.

Вопросы производительности

SplitМетоды выделяют память для возвращаемого объекта массива и String объекта для каждого элемента массива. Если для приложения требуется оптимальная производительность или управление выделением памяти является критически важным в приложении, рассмотрите возможность использования IndexOf IndexOfAny метода или и, при необходимости, Compare метода, чтобы нахождение подстроки в строке.

При разделении строки на символ-разделитель используйте IndexOf IndexOfAny метод или для нахождение символа разделителя в строке. При разделении строки в строке-разделителе используйте IndexOf IndexOfAny метод или для нахождение первого символа строки разделителя. Затем используйте Compare метод, чтобы определить, равны ли символы, указанные после первого символа, оставшимся символам строки разделителя.

Кроме того, если для разделения строк в нескольких вызовах методов используется один и тот же набор символов Split , рассмотрите возможность создания одного массива и ссылки на него в каждом вызове метода. Это значительно сокращает дополнительную нагрузку на каждый вызов метода.

Примечания для тех, кто вызывает этот метод

в платформа .NET Framework 3,5 и более ранних версиях, если Split(Char[]) методу передается значение separator , равное null или не содержащее символов, метод использует немного другой набор символов пробела, чтобы разделить строку, чем Trim(Char[]) метод, чтобы обрезать строку. начиная с платформа .NET Framework 4, оба метода используют идентичный набор пробельных символов юникода.

Применяется к

Split(String[], StringSplitOptions)

Разбивает строку на подстроки на основе указанных строк-разделителей и, при необходимости, параметров.

public:
 cli::array <System::String ^> ^ Split(cli::array <System::String ^> ^ separator, StringSplitOptions options);
public string[] Split (string[] separator, StringSplitOptions options);
public string[] Split (string[]? separator, StringSplitOptions options);
[System.Runtime.InteropServices.ComVisible(false)]
public string[] Split (string[] separator, StringSplitOptions options);
member this.Split : string[] * StringSplitOptions -> string[]
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.Split : string[] * StringSplitOptions -> string[]
Public Function Split (separator As String(), options As StringSplitOptions) As String()

Параметры

separator
String[]

Массив строк, разделяющих подстроки в данной строке, пустой массив, не содержащий разделителей, или null.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, элементы которого содержат подстроки данной строки, разделенные одной или более строками из separator. Дополнительные сведения см. в разделе "Примечания".

Атрибуты

Исключения

options не является одним из значений StringSplitOptions.

Примеры

В следующем примере показана разница в массивах, возвращаемых путем вызова String.Split(String[], StringSplitOptions) метода строки с options параметром, равным StringSplitOptions.None и StringSplitOptions.RemoveEmptyEntries .

string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
string[] stringSeparators = new string[] { "[stop]" };
string[] result;

// Display the original string and delimiter string.
Console.WriteLine($"Splitting the string:\n   \"{source}\".");
Console.WriteLine();
Console.WriteLine($"Using the delimiter string:\n   \"{stringSeparators[0]}\"");
Console.WriteLine();

// Split a string delimited by another string and return all elements.
result = source.Split(stringSeparators, StringSplitOptions.None);
Console.WriteLine($"Result including all elements ({result.Length} elements):");
Console.Write("   ");
foreach (string s in result)
{
    Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}
Console.WriteLine();
Console.WriteLine();

// Split delimited by another string and return all non-empty elements.
result = source.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"Result including non-empty elements ({result.Length} elements):");
Console.Write("   ");
foreach (string s in result)
{
    Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}
Console.WriteLine();

// The example displays the following output:
//    Splitting the string:
//       "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
//    
//    Using the delimiter string:
//       "[stop]"
//    
//    Result including all elements (9 elements):
//       '<>' 'ONE' '<>' 'TWO' '<>' '<>' 'THREE' '<>' '<>'
//    
//    Result including non-empty elements (3 elements):
//       'ONE' 'TWO' 'THREE'
Dim source As String = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]"
Dim stringSeparators() As String = {"[stop]"}
Dim result() As String

' Display the original string and delimiter string.
Console.WriteLine("Splitting the string:{0}   '{1}'.", vbCrLf, source)
Console.WriteLine()
Console.WriteLine("Using the delimiter string:{0}   '{1}'.",
                vbCrLf, stringSeparators(0))
Console.WriteLine()

' Split a string delimited by another string and return all elements.
result = source.Split(stringSeparators, StringSplitOptions.None)
Console.WriteLine("Result including all elements ({0} elements):",
                result.Length)
Console.Write("   ")
For Each s As String In result
    Console.Write("'{0}' ", IIf(String.IsNullOrEmpty(s), "<>", s))
Next
Console.WriteLine()
Console.WriteLine()

' Split delimited by another string and return all non-empty elements.
result = source.Split(stringSeparators,
                    StringSplitOptions.RemoveEmptyEntries)
Console.WriteLine("Result including non-empty elements ({0} elements):",
                result.Length)
Console.Write("   ")
For Each s As String In result
    Console.Write("'{0}' ", IIf(String.IsNullOrEmpty(s), "<>", s))
Next
Console.WriteLine()

' The example displays the following output:
'    Splitting the string:
'       "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'    
'    Using the delimiter string:
'       "[stop]"
'    
'    Result including all elements (9 elements):
'       '<>' 'ONE' '<>' 'TWO' '<>' '<>' 'THREE' '<>' '<>'
'    
'    Result including non-empty elements (3 elements):
'       'ONE' 'TWO' 'THREE'

В следующем примере определяется массив разделителей, включающих знаки препинания и пробелы. Передача этого массива вместе со значением StringSplitOptions.RemoveEmptyEntries в Split(String[], StringSplitOptions) метод возвращает массив, состоящий из отдельных слов из строки.

string[] separators = { ",", ".", "!", "?", ";", ":", " " };
string value = "The handsome, energetic, young dog was playing with his smaller, more lethargic litter mate.";
string[] words = value.Split(separators, StringSplitOptions.RemoveEmptyEntries);
foreach (var word in words)
    Console.WriteLine(word);

// The example displays the following output:
//       The
//       handsome
//       energetic
//       young
//       dog
//       was
//       playing
//       with
//       his
//       smaller
//       more
//       lethargic
//       litter
//       mate
    Dim separators() As String = {",", ".", "!", "?", ";", ":", " "}
    Dim value As String = "The handsome, energetic, young dog was playing with his smaller, more lethargic litter mate."
    Dim words() As String = value.Split(separators, StringSplitOptions.RemoveEmptyEntries)
    For Each word In words
        Console.WriteLine(word)
    Next
End Sub

' The example displays the following output:
'
'       The
'       handsome
'       energetic
'       young
'       dog
'       was
'       playing
'       with
'       his
'       smaller
'       more
'       lethargic
'       litter
'       mate

Обратите внимание, что метод вызывается с options аргументом, для которого задано значение StringSplitOptions.RemoveEmptyEntries . Это предотвращает включение в возвращаемый массив String.Empty значений, представляющих собой пустые подстроки, совпадающие между знаками препинания и пробелами.

Комментарии

Если строка отделяется от известного набора строк, можно использовать Split метод, чтобы разделить его на подстроки.

Строки разделителей не включаются в элементы возвращаемого массива. Например, если separator массив содержит строку "--", а значение текущего экземпляра строки — "AA--BB--CC", метод возвращает массив, содержащий три элемента: "AA", "BB" и "CC".

Если этот экземпляр не содержит строк в separator , возвращаемый массив состоит из одного элемента, содержащего этот экземпляр.

Если options параметр имеет значение, RemoveEmptyEntries а длина этого экземпляра равна нулю, метод возвращает пустой массив.

Каждый элемент separator определяет отдельный разделитель, состоящий из одного или нескольких символов. Если options аргумент имеет значение None , а два разделителя являются смежными или разделитель находится в начале или в конце данного экземпляра, соответствующий элемент массива содержит String.Empty . Например, если separator содержит два элемента, "-" и " _ ", значением экземпляра строки является "- _ AA- _ ", а значение options аргумента — None , метод возвращает массив строк со следующими пятью элементами:

  1. String.Empty, представляющий пустую строку, предшествующую подстроке "-" с индексом 0.

  2. String.Empty, представляющий пустую строку между подстрокой "-" с индексом 0 и подстрокой "_" с индексом 1.

  3. "AA".

  4. String.Empty, представляющий пустую строку, следующую за подстрокой «-» с индексом 4.

  5. String.Empty, представляющий пустую строку, следующую за подстрокой "_" в индексе 5.

Массив разделителя

Если любой из элементов separator состоит из нескольких символов, вся подстрока считается разделителем. Например, если один из элементов separator имеет значение "10", попытка разделить строку "This10is10a10string". Возвращает следующий массив из четырех элементов: {"this", "имеет значение", "a", "строка". }.

Если separator параметр имеет значение null или не содержит непустые строки, то символы пробела считаются разделителями. Символы пробела определяются стандартом Юникода, а Char.IsWhiteSpace метод возвращает, true если они передаются в него.

Для передачи null string[] separator параметра необходимо указать тип null для устранения неоднозначности вызова из других перегрузок, таких как Split(Char[], StringSplitOptions) . В следующем примере показано несколько способов однозначного определения этой перегрузки.

string phrase = "The quick  brown fox";

_ = phrase.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split((string[])null, StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split(null as string[], StringSplitOptions.RemoveEmptyEntries);
Dim phrase As String = "The quick brown fox"
Dim words() As String

words = phrase.Split(TryCast(Nothing, String()),
                       StringSplitOptions.RemoveEmptyEntries)

words = phrase.Split(New String() {},
                     StringSplitOptions.RemoveEmptyEntries)

Сведения о сравнении

SplitМетод извлекает подстроки в этой строке, разделенные одной или несколькими строками в separator параметре, и возвращает эти подстроки как элементы массива.

SplitМетод ищет разделители, выполняя сравнения, используя правила сортировки порядковых номеров с учетом регистра. Дополнительные сведения о сортировке по словам, строкам и порядковым номерам см. в разделе System.Globalization.CompareOptions перечисление.

SplitМетод игнорирует любой элемент separator , значение которого равно или является null пустой строкой ("").

Чтобы избежать неоднозначных результатов, когда строки в separator имеют общие символы, Split операция продолжается от начала до конца значения экземпляра и соответствует первому элементу в separator , который равен разделителю в экземпляре. Порядок, в котором подстроки встречаются в экземпляре, имеет приоритет над порядком элементов в separator .

Например, рассмотрим экземпляр, значение которого равно «abcdef». Если первый элемент в имел значение " separator EF", а второй элемент — "bcde", результатом операции разбиения будет массив строк, содержащий два элемента: "a" и "f". Это обусловлено тем, что обнаружена подстрока в экземпляре "bcde", и она соответствует элементу separator до обнаружения подстроки "f".

Однако, если первый элемент имел значение " separator BCD", а второй элемент — "BC", результатом операции разбиения будет массив строк, содержащий два элемента: "a" и "EF". Это происходит потому, что "BCD" является первым разделителем в separator , который соответствует разделителю в экземпляре. Если порядок разделителей был реверсирован, так что первый элемент был "BC", а второй — "BCD", результатом будет массив строк, содержащий два элемента: "a" и "def".

Особенности производительности

SplitМетоды выделяют память для возвращаемого объекта массива и String объекта для каждого элемента массива. Если для приложения требуется оптимальная производительность или управление выделением памяти является критически важным в приложении, рассмотрите возможность использования IndexOf IndexOfAny метода или и, при необходимости, Compare метода, чтобы нахождение подстроки в строке.

При разделении строки на символ-разделитель используйте IndexOf IndexOfAny метод или для нахождение символа разделителя в строке. При разделении строки в строке-разделителе используйте IndexOf IndexOfAny метод или для нахождение первого символа строки разделителя. Затем используйте Compare метод, чтобы определить, равны ли символы, указанные после первого символа, оставшимся символам строки разделителя.

Кроме того, если для разделения строк в нескольких вызовах методов используется один и тот же набор символов Split , рассмотрите возможность создания одного массива и ссылки на него в каждом вызове метода. Это значительно сокращает дополнительную нагрузку на каждый вызов метода.

Примечания для тех, кто вызывает этот метод

в платформа .NET Framework 3,5 и более ранних версиях, если Split(Char[]) методу передается значение separator , равное null или не содержащее символов, метод использует немного другой набор символов пробела, чтобы разделить строку, чем Trim(Char[]) метод, чтобы обрезать строку. начиная с платформа .NET Framework 4, оба метода используют идентичный набор пробельных символов юникода.

Применяется к

Split(String, Int32, StringSplitOptions)

Разбивает строку на максимальное число подстрок на основе указанной строки-разделителя и, при необходимости, параметров.

public string[] Split (string? separator, int count, StringSplitOptions options = System.StringSplitOptions.None);
public string[] Split (string separator, int count, StringSplitOptions options = System.StringSplitOptions.None);
member this.Split : string * int * StringSplitOptions -> string[]
Public Function Split (separator As String, count As Integer, Optional options As StringSplitOptions = System.StringSplitOptions.None) As String()

Параметры

separator
String

Строка, разделяющая подстроки в этом экземпляре.

count
Int32

Максимальное количество элементов в массиве.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, содержащий подстроки из этого экземпляра (не более count), разделенные символом separator.

Комментарии

Если строка уже была разбита count на 1 раз, но конец строки не был достигнут, последняя строка в возвращенном массиве будет содержать оставшуюся конечную подстроку этого экземпляра без изменений.

Применяется к

Split(Char[], StringSplitOptions)

Разбивает строку на подстроки на основе указанных символов-разделителей и параметров.

public:
 cli::array <System::String ^> ^ Split(cli::array <char> ^ separator, StringSplitOptions options);
public string[] Split (char[] separator, StringSplitOptions options);
public string[] Split (char[]? separator, StringSplitOptions options);
[System.Runtime.InteropServices.ComVisible(false)]
public string[] Split (char[] separator, StringSplitOptions options);
member this.Split : char[] * StringSplitOptions -> string[]
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.Split : char[] * StringSplitOptions -> string[]
Public Function Split (separator As Char(), options As StringSplitOptions) As String()

Параметры

separator
Char[]

Массив символов, разделяющих подстроки в данной строке, пустой массив, не содержащий разделителей, или null.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, элементы которого содержат подстроки данной строки, разделенные одним или более знаками из separator. Дополнительные сведения см. в разделе "Примечания".

Атрибуты

Исключения

options не является одним из значений StringSplitOptions.

Примеры

В следующем примере StringSplitOptions перечисление используется для включения или исключения подстрок, созданных Split методом.

// This example demonstrates the String.Split(Char[], Boolean) and 
//                               String.Split(Char[], Int32, Boolean) methods
using namespace System;
void Show( array<String^>^entries )
{
   Console::WriteLine( "The return value contains these {0} elements:", entries->Length );
   System::Collections::IEnumerator^ myEnum = entries->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ entry = safe_cast<String^>(myEnum->Current);
      Console::Write( "<{0}>", entry );
   }

   Console::Write( "{0}{0}", Environment::NewLine );
}

int main()
{
   String^ s = ",one,,,two,,,,,three,,";
   array<Char>^sep = gcnew array<Char>{
      ','
   };
   array<String^>^result;
   
   //
   Console::WriteLine( "The original string is \"{0}\".", s );
   Console::WriteLine( "The separation character is '{0}'.", sep[ 0 ] );
   Console::WriteLine();
   
   //
   Console::WriteLine( "Split the string and return all elements:" );
   result = s->Split( sep, StringSplitOptions::None );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return all non-empty elements:" );
   result = s->Split( sep, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return 2 elements:" );
   result = s->Split( sep, 2, StringSplitOptions::None );
   Show( result );
   
   //
   Console::WriteLine( "Split the string and return 2 non-empty elements:" );
   result = s->Split( sep, 2, StringSplitOptions::RemoveEmptyEntries );
   Show( result );
}

/*
This example produces the following results:

The original string is ",one,,,two,,,,,three,,".
The separation character is ','.

Split the string and return all elements:
The return value contains these 12 elements:
<><one><><><two><><><><><three><><>

Split the string and return all non-empty elements:
The return value contains these 3 elements:
<one><two><three>

Split the string and return 2 elements:
The return value contains these 2 elements:
<><one,,,two,,,,,three,,>

Split the string and return 2 non-empty elements:
The return value contains these 2 elements:
<one><,,two,,,,,three,,>

*/
// This example demonstrates the String.Split() methods that use
// the StringSplitOptions enumeration.
string s1 = ",ONE,,TWO,,,THREE,,";
string s2 = "[stop]" +
            "ONE[stop][stop]" +
            "TWO[stop][stop][stop]" +
            "THREE[stop][stop]";
char[] charSeparators = new char[] { ',' };
string[] stringSeparators = new string[] { "[stop]" };
string[] result;
// ------------------------------------------------------------------------------
// Split a string delimited by characters.
// ------------------------------------------------------------------------------
Console.WriteLine("1) Split a string delimited by characters:\n");

// Display the original string and delimiter characters.
Console.WriteLine($"1a) The original string is \"{s1}\".");
Console.WriteLine($"The delimiter character is '{charSeparators[0]}'.\n");

// Split a string delimited by characters and return all elements.
Console.WriteLine("1b) Split a string delimited by characters and " +
                  "return all elements:");
result = s1.Split(charSeparators, StringSplitOptions.None);
Show(result);

// Split a string delimited by characters and return all non-empty elements.
Console.WriteLine("1c) Split a string delimited by characters and " +
                  "return all non-empty elements:");
result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Split the original string into the string and empty string before the
// delimiter and the remainder of the original string after the delimiter.
Console.WriteLine("1d) Split a string delimited by characters and " +
                  "return 2 elements:");
result = s1.Split(charSeparators, 2, StringSplitOptions.None);
Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
Console.WriteLine("1e) Split a string delimited by characters and " +
                  "return 2 non-empty elements:");
result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// ------------------------------------------------------------------------------
// Split a string delimited by another string.
// ------------------------------------------------------------------------------
Console.WriteLine("2) Split a string delimited by another string:\n");

// Display the original string and delimiter string.
Console.WriteLine($"2a) The original string is \"{s2}\".");
Console.WriteLine($"The delimiter string is \"{stringSeparators[0]}\".\n");

// Split a string delimited by another string and return all elements.
Console.WriteLine("2b) Split a string delimited by another string and " +
                  "return all elements:");
result = s2.Split(stringSeparators, StringSplitOptions.None);
Show(result);

// Split the original string at the delimiter and return all non-empty elements.
Console.WriteLine("2c) Split a string delimited by another string and " +
                  "return all non-empty elements:");
result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Split the original string into the empty string before the
// delimiter and the remainder of the original string after the delimiter.
Console.WriteLine("2d) Split a string delimited by another string and " +
                  "return 2 elements:");
result = s2.Split(stringSeparators, 2, StringSplitOptions.None);
Show(result);

// Split the original string into the string after the delimiter and the
// remainder of the original string after the delimiter.
Console.WriteLine("2e) Split a string delimited by another string and " +
                  "return 2 non-empty elements:");
result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries);
Show(result);

// Display the array of separated strings using a local function
void Show(string[] entries)
{
    Console.WriteLine($"The return value contains these {entries.Length} elements:");
    foreach (string entry in entries)
    {
        Console.Write($"<{entry}>");
    }
    Console.Write("\n\n");
}

/*
This example produces the following results:

1) Split a string delimited by characters:

1a) The original string is ",ONE,,TWO,,,THREE,,".
The delimiter character is ','.

1b) Split a string delimited by characters and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

1c) Split a string delimited by characters and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

1d) Split a string delimited by characters and return 2 elements:
The return value contains these 2 elements:
<><ONE,,TWO,,,THREE,,>

1e) Split a string delimited by characters and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO,,,THREE,,>

2) Split a string delimited by another string:

2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
The delimiter string is "[stop]".

2b) Split a string delimited by another string and return all elements:
The return value contains these 9 elements:
<><ONE><><TWO><><><THREE><><>

2c) Split a string delimited by another string and return all non-empty elements:
The return value contains these 3 elements:
<ONE><TWO><THREE>

2d) Split a string delimited by another string and return 2 elements:
The return value contains these 2 elements:
<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>

2e) Split a string delimited by another string and return 2 non-empty elements:
The return value contains these 2 elements:
<ONE><TWO[stop][stop][stop]THREE[stop][stop]>

*/
    Dim s1 As String = ",ONE,,TWO,,,THREE,,"
    Dim s2 As String = "[stop]" &
                       "ONE[stop][stop]" &
                       "TWO[stop][stop][stop]" &
                       "THREE[stop][stop]"
    Dim charSeparators() As Char = {","c}
    Dim stringSeparators() As String = {"[stop]"}
    Dim result() As String
    ' ------------------------------------------------------------------------------
    ' Split a string delimited by characters.
    ' ------------------------------------------------------------------------------
    Console.WriteLine("1) Split a string delimited by characters:" & vbCrLf)

    ' Display the original string and delimiter characters.
    Console.WriteLine("1a) The original string is ""{0}"".", s1)
    Console.WriteLine("The delimiter character is '{0}'." & vbCrLf, charSeparators(0))

    ' Split a string delimited by characters and return all elements.
    Console.WriteLine("1b) Split a string delimited by characters and " &
                      "return all elements:")
    result = s1.Split(charSeparators, StringSplitOptions.None)
    Show(result)

    ' Split a string delimited by characters and return all non-empty elements.
    Console.WriteLine("1c) Split a string delimited by characters and " &
                      "return all non-empty elements:")
    result = s1.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' Split the original string into the string and empty string before the 
    ' delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("1d) Split a string delimited by characters and " &
                      "return 2 elements:")
    result = s1.Split(charSeparators, 2, StringSplitOptions.None)
    Show(result)

    ' Split the original string into the string after the delimiter and the 
    ' remainder of the original string after the delimiter.
    Console.WriteLine("1e) Split a string delimited by characters and " &
                      "return 2 non-empty elements:")
    result = s1.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' ------------------------------------------------------------------------------
    ' Split a string delimited by another string.
    ' ------------------------------------------------------------------------------
    Console.WriteLine("2) Split a string delimited by another string:" & vbCrLf)

    ' Display the original string and delimiter string.
    Console.WriteLine("2a) The original string is ""{0}"".", s2)
    Console.WriteLine("The delimiter string is ""{0}""." & vbCrLf, stringSeparators(0))

    ' Split a string delimited by another string and return all elements.
    Console.WriteLine("2b) Split a string delimited by another string and " &
                      "return all elements:")
    result = s2.Split(stringSeparators, StringSplitOptions.None)
    Show(result)

    ' Split the original string at the delimiter and return all non-empty elements.
    Console.WriteLine("2c) Split a string delimited by another string and " &
                      "return all non-empty elements:")
    result = s2.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

    ' Split the original string into the empty string before the 
    ' delimiter and the remainder of the original string after the delimiter.
    Console.WriteLine("2d) Split a string delimited by another string and " &
                      "return 2 elements:")
    result = s2.Split(stringSeparators, 2, StringSplitOptions.None)
    Show(result)

    ' Split the original string into the string after the delimiter and the 
    ' remainder of the original string after the delimiter.
    Console.WriteLine("2e) Split a string delimited by another string and " &
                      "return 2 non-empty elements:")
    result = s2.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries)
    Show(result)

End Sub


' Display the array of separated strings.
Public Shared Sub Show(ByVal entries() As String)
    Console.WriteLine("The return value contains these {0} elements:", entries.Length)
    Dim entry As String
    For Each entry In entries
        Console.Write("<{0}>", entry)
    Next entry
    Console.Write(vbCrLf & vbCrLf)

End Sub

'This example produces the following results:
'
'1) Split a string delimited by characters:
'
'1a) The original string is ",ONE,,TWO,,,THREE,,".
'The delimiter character is ','.
'
'1b) Split a string delimited by characters and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'1c) Split a string delimited by characters and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'1d) Split a string delimited by characters and return 2 elements:
'The return value contains these 2 elements:
'<><ONE,,TWO,,,THREE,,>
'
'1e) Split a string delimited by characters and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO,,,THREE,,>
'
'2) Split a string delimited by another string:
'
'2a) The original string is "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]".
'The delimiter string is "[stop]".
'
'2b) Split a string delimited by another string and return all elements:
'The return value contains these 9 elements:
'<><ONE><><TWO><><><THREE><><>
'
'2c) Split a string delimited by another string and return all non-empty elements:
'The return value contains these 3 elements:
'<ONE><TWO><THREE>
'
'2d) Split a string delimited by another string and return 2 elements:
'The return value contains these 2 elements:
'<><ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]>
'
'2e) Split a string delimited by another string and return 2 non-empty elements:
'The return value contains these 2 elements:
'<ONE><TWO[stop][stop][stop]THREE[stop][stop]>
'

Комментарии

Символы-разделители (символы в separator массиве) не включаются в элементы возвращаемого массива. Например, если separator массив содержит символ "-", а значение текущего экземпляра строки — "AA-BB-CC", метод возвращает массив, содержащий три элемента: "AA", "BB" и "CC".

Если этот экземпляр не содержит символов в separator , возвращаемый массив состоит из одного элемента, содержащего этот экземпляр.

Если options параметр имеет значение, RemoveEmptyEntries а длина этого экземпляра равна нулю, метод возвращает пустой массив.

Каждый элемент separator определяет отдельный разделитель, состоящий из одного символа. Если options аргумент имеет значение None , а два разделителя являются смежными или разделитель находится в начале или в конце данного экземпляра, соответствующий элемент массива содержит String.Empty . Например, если separator содержит два элемента, '-' а '_' значение экземпляра строки — "- _ AA- _ ", а значение options аргумента — None , метод возвращает массив строк со следующими пятью элементами:

  1. String.Empty, представляющий пустую строку, предшествующую символу "-" в индексе 0.

  2. String.Empty, представляющий пустую строку между символом "-" в индексе 0 и символом "_" в индексе 1.

  3. "AA".

  4. String.Empty, представляющий пустую строку, следующую за символом "-" в индексе 4.

  5. String.Empty, представляющий пустую строку, следующую за символом "_" в индексе 5.

Массив разделителя

Если separator параметр имеет значение null или не содержит символов, то символы пробела считаются разделителями. Символы пробела определяются стандартом Юникода, а Char.IsWhiteSpace метод возвращает, true если они передаются в него.

Для передачи null char[] separator параметра необходимо указать тип null для устранения неоднозначности вызова из других перегрузок, таких как Split(String[], StringSplitOptions) . В следующем примере показано несколько способов однозначного определения этой перегрузки.

string phrase = "The quick  brown fox";

_ = phrase.Split(default(char[]), StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);

_ = phrase.Split(null as char[], StringSplitOptions.RemoveEmptyEntries);
Dim phrase As String = "The quick brown fox"
Dim words() As String

words = phrase.Split(TryCast(Nothing, Char()),
                       StringSplitOptions.RemoveEmptyEntries)

words = phrase.Split(New Char() {},
                     StringSplitOptions.RemoveEmptyEntries)

Сведения о сравнении

SplitМетод извлекает подстроки в этой строке, разделенные одним или несколькими символами в separator параметре, и возвращает эти подстроки как элементы массива.

SplitМетод ищет разделители, выполняя сравнения, используя правила сортировки порядковых номеров с учетом регистра. Дополнительные сведения о сортировке по словам, строкам и порядковым номерам см. в разделе System.Globalization.CompareOptions перечисление.

Вопросы производительности

SplitМетоды выделяют память для возвращаемого объекта массива и String объекта для каждого элемента массива. Если для приложения требуется оптимальная производительность или управление выделением памяти является критически важным в приложении, рассмотрите возможность использования IndexOf IndexOfAny метода или и, при необходимости, Compare метода, чтобы нахождение подстроки в строке.

При разделении строки на символ-разделитель используйте IndexOf IndexOfAny метод или для нахождение символа разделителя в строке. При разделении строки в строке-разделителе используйте IndexOf IndexOfAny метод или для нахождение первого символа строки разделителя. Затем используйте Compare метод, чтобы определить, равны ли символы, указанные после первого символа, оставшимся символам строки разделителя.

Кроме того, если для разделения строк в нескольких вызовах методов используется один и тот же набор символов Split , рассмотрите возможность создания одного массива и ссылки на него в каждом вызове метода. Это значительно сокращает дополнительную нагрузку на каждый вызов метода.

Примечания для тех, кто вызывает этот метод

в платформа .NET Framework 3,5 и более ранних версиях, если Split(Char[]) методу передается значение separator , равное null или не содержащее символов, метод использует немного другой набор символов пробела, чтобы разделить строку, чем Trim(Char[]) метод, чтобы обрезать строку. начиная с платформа .NET Framework 4, оба метода используют идентичный набор пробельных символов юникода.

Применяется к

Split(Char[], Int32)

Разбивает строку на максимальное число подстрок на основе указанных символов-разделителей.

public:
 cli::array <System::String ^> ^ Split(cli::array <char> ^ separator, int count);
public string[] Split (char[] separator, int count);
public string[] Split (char[]? separator, int count);
member this.Split : char[] * int -> string[]
Public Function Split (separator As Char(), count As Integer) As String()

Параметры

separator
Char[]

Массив символов, разделяющих подстроки в данной строке, пустой массив, не содержащий разделителей, или null.

count
Int32

Максимальное число возвращаемых подстрок.

Возвращаемое значение

String[]

Массив, элементы которого содержат подстроки данного экземпляра, разделенные одним или более знаками из separator. Дополнительные сведения см. в разделе "Примечания".

Исключения

count является отрицательным значением.

Примеры

В следующем примере показано, как count можно использовать для ограничения количества строк, возвращаемых Split .

string name = "Alex Johnson III";

string[] subs = name.Split(null, 2);

string firstName = subs[0];
string lastName;
if (subs.Length > 1)
{
    lastName = subs[1];
}

// firstName = "Alex"
// lastName = "Johnson III"
Console.WriteLine("What is your name?")
Dim name As String = Console.ReadLine()

Dim substrings = name.Split(Nothing, 2)
Dim firstName As String = substrings(0)
Dim lastName As String

If substrings.Length > 1 Then
    lastName = substrings(1)
End If

' If the user enters "Alex Johnson III":
' firstName = "Alex"
' lastName = "Johnson III"

Комментарии

Символы разделителей не включаются в элементы возвращаемого массива.

Если этот экземпляр не содержит символов в separator , возвращаемый массив состоит из одного элемента, содержащего этот экземпляр. Если count значение равно нулю, возвращается пустой массив.

Если separator параметр имеет значение null или не содержит символов, то символы пробела считаются разделителями. Символы пробела определяются стандартом Юникода, а Char.IsWhiteSpace метод возвращает, true если они передаются в него.

Каждый элемент separator определяет отдельный символ-разделитель. Если два разделителя являются смежными или обнаружен разделитель в начале или в конце данного экземпляра, соответствующий элемент массива содержит Empty .

Если count в этом экземпляре больше подстрок, первые count - 1 подстроки возвращаются в первых элементах count - 1 возвращаемого значения, а остальные символы в этом экземпляре возвращаются в последнем элементе возвращаемого значения.

Если count больше числа подстрок, возвращаются доступные подстроки и исключение не создается.

В следующей таблице приведены некоторые примеры.

Язык Строковое значение Separator Возвращаемый массив
C# "42, 12, 19" New char [] {', ', ' '} {"42", "", "12", "", "19"}
Visual Basic "42, 12, 19" Char () = {"," c, "" c}) {"42", "", "12", "", "19"}
C# "42.. 12.. 19". New char [] {'. '} {"42", "", "12", "", "19", ""}
Visual Basic "42.. 12.. 19". Char () = {"." ц {"42", "", "12", "", "19", ""}
C# Банан New char [] {'. '} {"Полукруглое"}
Visual Basic Банан Char () = {"." ц {"Полукруглое"}
C# "Дарб\nСмарба" New char [] {} {"Дарб", "Смарба"}
Visual Basic "Дарб" & Вблф & "Смарба" Char () = {} {"Дарб", "Смарба"}
C# "Дарб\nСмарба" null {"Дарб", "Смарба"}
Visual Basic "Дарб" & Вблф & "Смарба" Nothing {"Дарб", "Смарба"}

Вопросы производительности

SplitМетоды выделяют память для возвращаемого объекта массива и String объекта для каждого элемента массива. Если для приложения требуется оптимальная производительность или управление выделением памяти является критически важным в приложении, рассмотрите возможность использования IndexOf IndexOfAny метода или и, при необходимости, Compare метода, чтобы нахождение подстроки в строке.

При разделении строки на символ-разделитель используйте IndexOf IndexOfAny метод или для нахождение символа разделителя в строке. При разделении строки в строке-разделителе используйте IndexOf IndexOfAny метод или для нахождение первого символа строки разделителя. Затем используйте Compare метод, чтобы определить, равны ли символы, указанные после первого символа, оставшимся символам строки разделителя.

Кроме того, если для разделения строк в нескольких вызовах методов используется один и тот же набор символов Split , рассмотрите возможность создания одного массива и ссылки на него в каждом вызове метода. Это значительно сокращает дополнительную нагрузку на каждый вызов метода.

Примечания для тех, кто вызывает этот метод

в платформа .NET Framework 3,5 и более ранних версиях, если Split(Char[]) методу передается значение separator , равное null или не содержащее символов, метод использует немного другой набор символов пробела, чтобы разделить строку, чем Trim(Char[]) метод, чтобы обрезать строку. начиная с платформа .NET Framework 4, оба метода используют идентичный набор пробельных символов юникода.

См. также раздел

Применяется к

Split(Char, StringSplitOptions)

Разбивает строку на подстроки на основе указанного символа-разделителя и, при необходимости, параметров.

public string[] Split (char separator, StringSplitOptions options = System.StringSplitOptions.None);
member this.Split : char * StringSplitOptions -> string[]
Public Function Split (separator As Char, Optional options As StringSplitOptions = System.StringSplitOptions.None) As String()

Параметры

separator
Char

Символ, разделяющий подстроки в этой строке.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, элементы которого содержат подстроки из этого экземпляра, разделенные символом separator.

Применяется к

Split(String, StringSplitOptions)

Разделяет строку на подстроки в соответствии с указанной строкой-разделителем.

public string[] Split (string? separator, StringSplitOptions options = System.StringSplitOptions.None);
public string[] Split (string separator, StringSplitOptions options = System.StringSplitOptions.None);
member this.Split : string * StringSplitOptions -> string[]
Public Function Split (separator As String, Optional options As StringSplitOptions = System.StringSplitOptions.None) As String()

Параметры

separator
String

Строка, разделяющая подстроки в этой строке.

options
StringSplitOptions

Побитовое сочетание значений перечисления, которое указывает, следует ли обрезать подстроки и включать пустые подстроки.

Возвращаемое значение

String[]

Массив, элементы которого содержат подстроки из этого экземпляра, разделенные символом separator.

Применяется к

Split(Char[])

Разбивает строку на подстроки на основе указанных символов-разделителей.

public:
 cli::array <System::String ^> ^ Split(... cli::array <char> ^ separator);
public string[] Split (params char[] separator);
public string[] Split (params char[]? separator);
member this.Split : char[] -> string[]
Public Function Split (ParamArray separator As Char()) As String()

Параметры

separator
Char[]

Массив символов-разделителей, пустой массив, не содержащий разделителей, или null.

Возвращаемое значение

String[]

Массив, элементы которого содержат подстроки из этого экземпляра, разделенные символами из separator. Дополнительные сведения см. в разделе "Примечания".

Примеры

В следующем примере показано, как извлечь отдельные слова из блока текста, рассматривая символ пробела ( ) и символ табуляции ( \t ) в качестве разделителей. Разделенная строка включает оба этих символа.

string s = "Today\tI'm going to school";
string[] subs = s.Split(' ', '\t');

foreach (var sub in subs)
{
    Console.WriteLine($"Substring: {sub}");
}

// This example produces the following output:
//
// Substring: Today
// Substring: I'm
// Substring: going
// Substring: to
// Substring: school
Dim s As String = "Today" & vbTab & "I'm going to school"
Dim subs As String() = s.Split(" "c, Char.Parse(vbTab))

For Each substring In subs
    Console.WriteLine("Substring: " & substring)
Next

' This example produces the following output:
'
' Substring: Today
' Substring: I 'm
' Substring: going
' Substring: to
' Substring: school

Комментарии

Если строка отделяется от известного набора символов, можно использовать Split(Char[]) метод, чтобы разделить его на подстроки.

Символы разделителей не включаются в элементы возвращаемого массива. Например, если массив разделителя содержит символ "-", а значение текущего экземпляра строки — "AA-BB-CC", метод возвращает массив, содержащий три элемента: "AA", "BB" и "CC".

Если этот экземпляр не содержит символов в separator , возвращаемый массив состоит из одного элемента, содержащего этот экземпляр.

Каждый элемент separator определяет отдельный символ-разделитель. Если два разделителя являются смежными или обнаружен разделитель в начале или в конце этого экземпляра, то соответствующий элемент в возвращаемом массиве содержит Empty .

В следующей таблице приведены некоторые примеры.

Язык Строковое значение Separator Возвращаемый массив
C# "42, 12, 19" New char [] {', ', ' '} {"42", "", "12", "", "19"}
Visual Basic "42, 12, 19" Char () = {"," c, "" c}) {"42", "", "12", "", "19"}
C# "42.. 12.. 19". New char [] {'. '} {"42", "", "12", "", "19", ""}
Visual Basic "42.. 12.. 19". Char () = {"." ц {"42", "", "12", "", "19", ""}
C# Банан New char [] {'. '} {"Полукруглое"}
Visual Basic Банан Char () = {"." ц {"Полукруглое"}
C# "Дарб\nСмарба" New char [] {} {"Дарб", "Смарба"}
Visual Basic "Дарб" & Вблф & "Смарба" Char () = {} {"Дарб", "Смарба"}
C# "Дарб\nСмарба" null {"Дарб", "Смарба"}
Visual Basic "Дарб" & Вблф & "Смарба" Nothing {"Дарб", "Смарба"}

Массив разделителя

Каждый элемент разделителя определяет отдельный разделитель, состоящий из одного символа.

Если separator аргумент имеет значение null или не содержит символов, метод рассматривает пробельные символы как разделители. Символы пробела определяются стандартом Unicode, а Char.IsWhiteSpace метод возвращает, true Если в него передается символ пробела.

String. Split (char []) и разрешение перегрузки компилятора

Хотя единственный параметр для этой перегрузки String.Split является массивом символов, его можно вызвать с помощью одного символа, как показано в следующем примере.

string value = "This is a short string.";
char delimiter = 's';
string[] substrings = value.Split(delimiter);
foreach (var substring in substrings)
    Console.WriteLine(substring);

// The example displays the following output:
//     Thi
//      i
//      a
//     hort
//     tring.
    Dim value As String = "This is a short string."
    Dim delimiter As Char = "s"c
    Dim substrings() As String = value.Split(delimiter)
    For Each substring In substrings
        Console.WriteLine(substring)
    Next
End Sub

' The example displays the following output:
'
'     Thi
'      i
'      a
'     hort
'     tring.

Поскольку separator параметр снабжен ParamArrayAttribute атрибутом, компиляторы будут интерпретировать один символ как одноэлементный массив символов. Это не так для других String.Split перегрузок, включающих separator параметр. необходимо явно передать эти перегрузки в качестве separator аргумента массив символов.

Сведения о сравнении

Split(Char[])Метод извлекает подстроки в этой строке, разделенные одним или несколькими символами в separator массиве, и возвращает эти подстроки как элементы массива.

Split(Char[])Метод ищет разделители, выполняя сравнения, используя правила сортировки порядковых номеров с учетом регистра. Дополнительные сведения о сортировке по словам, строкам и порядковым номерам см. в разделе System.Globalization.CompareOptions перечисление.

Вопросы производительности

SplitМетоды выделяют память для возвращаемого объекта массива и String объекта для каждого элемента массива. Если для приложения требуется оптимальная производительность или управление выделением памяти является критически важным в приложении, рассмотрите возможность использования IndexOf IndexOfAny метода или. Кроме того, можно использовать Compare метод для нахождение подстроки в строке.

Чтобы разделить строку по символу-разделителю, используйте IndexOf IndexOfAny метод или для нахождение символа разделителя в строке. Чтобы разделить строку в строке-разделителе, используйте IndexOf метод или IndexOfAny для нахождение первого символа строки разделителя. Затем используйте Compare метод, чтобы определить, равны ли символы, указанные после первого символа, оставшимся символам строки разделителя.

Кроме того, если для разделения строк в нескольких вызовах методов используется один и тот же набор символов Split , рассмотрите возможность создания одного массива и ссылки на него в каждом вызове метода. Это значительно сокращает дополнительную нагрузку на каждый вызов метода.

Примечания для тех, кто вызывает этот метод

в платформа .NET Framework 3,5 и более ранних версиях, если Split(Char[]) методу передается значение separator , равное null или не содержащее символов, метод использует немного другой набор символов пробела, чтобы разделить строку, чем Trim(Char[]) метод, чтобы обрезать строку. начиная с платформа .NET Framework 4, оба метода используют идентичный набор пробельных символов юникода.

См. также раздел

Применяется к