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.
Как видите, символы-точки (.
) содержатся в двух подстроках. Если вы хотите исключить символы-точки, добавьте символ-точку как дополнительный символ разделителя. В следующем примере показано, как это сделать.
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:
Точки исчезли из подстрок, однако теперь появились две дополнительные пустые подстроки. Эти пустые подстроки представляют подстроку между словом и периодом после него. Чтобы исключить из результирующего массива пустые подстроки, вызовите перегрузку 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
В разделах для отдельных перегрузок 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]>
*/
Комментарии
Строки разделителей не включаются в элементы возвращаемого массива.
Если этот экземпляр не содержит ни одной строки в 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);
Если 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]>
*/
Комментарии
Символы разделителей не включаются в элементы возвращаемого массива.
Если этот экземпляр не содержит символов в 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);
Если 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'
В следующем примере определяется массив разделителей, включающих знаки препинания и пробелы. Передача этого массива вместе со значением 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
Обратите внимание, что метод вызывается с 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 , метод возвращает массив строк со следующими пятью элементами:
String.Empty, представляющий пустую строку, предшествующую подстроке "-" с индексом 0.
String.Empty, представляющий пустую строку между подстрокой "-" с индексом 0 и подстрокой "_" с индексом 1.
"AA".
String.Empty, представляющий пустую строку, следующую за подстрокой «-» с индексом 4.
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);
Сведения о сравнении
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]>
*/
Комментарии
Символы-разделители (символы в separator
массиве) не включаются в элементы возвращаемого массива. Например, если separator
массив содержит символ "-", а значение текущего экземпляра строки — "AA-BB-CC", метод возвращает массив, содержащий три элемента: "AA", "BB" и "CC".
Если этот экземпляр не содержит символов в separator
, возвращаемый массив состоит из одного элемента, содержащего этот экземпляр.
Если options
параметр имеет значение, RemoveEmptyEntries а длина этого экземпляра равна нулю, метод возвращает пустой массив.
Каждый элемент separator
определяет отдельный разделитель, состоящий из одного символа. Если options
аргумент имеет значение None , а два разделителя являются смежными или разделитель находится в начале или в конце данного экземпляра, соответствующий элемент массива содержит String.Empty . Например, если separator
содержит два элемента, '-'
а '_'
значение экземпляра строки — "- _ AA- _ ", а значение options
аргумента — None , метод возвращает массив строк со следующими пятью элементами:
String.Empty, представляющий пустую строку, предшествующую символу "-" в индексе 0.
String.Empty, представляющий пустую строку между символом "-" в индексе 0 и символом "_" в индексе 1.
"AA".
String.Empty, представляющий пустую строку, следующую за символом "-" в индексе 4.
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);
Сведения о сравнении
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"
Комментарии
Символы разделителей не включаются в элементы возвращаемого массива.
Если этот экземпляр не содержит символов в 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, оба метода используют идентичный набор пробельных символов юникода.
См. также раздел
- Char
- Array
- Int32
- Concat(Object)
- Insert(Int32, String)
- Join(String, String[])
- Remove(Int32, Int32)
- Replace(Char, Char)
- Substring(Int32)
- Trim(Char[])
Применяется к
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
Комментарии
Если строка отделяется от известного набора символов, можно использовать 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.
Поскольку 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, оба метода используют идентичный набор пробельных символов юникода.
См. также раздел
- Char
- Concat(Object)
- Insert(Int32, String)
- Join(String, String[])
- Remove(Int32, Int32)
- Replace(Char, Char)
- Substring(Int32)
- Trim(Char[])