Данная статья переведена автоматически. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала
Информация
Запрошенная вами тема показана ниже. Однако эта тема не включена в библиотеку.

String.Split - метод (String[], StringSplitOptions)

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

Пространство имен:  System
Сборка:  mscorlib (в mscorlib.dll)

[ComVisibleAttribute(false)]
public string[] Split(
	string[] separator,
	StringSplitOptions options
)

Параметры

separator
Тип: System.String[]
Массив односимвольных строк, разделяющих подстроки в данной строке, пустой массив, не содержащий разделителей, или null.
options
Тип: System.StringSplitOptions
RemoveEmptyEntries , чтобы исключить пустые элементы из возвращаемого массива; или None для включения пустых элементов в возвращаемый массив.

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

Тип: System.String[]
Массив, элементы которого содержат подстроки данной строки, разделенные одной или более строками из separator. Дополнительные сведения см. в разделе "Замечания".

ИсключениеУсловие
ArgumentException

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

Сведения возвращаемого значения

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

Если данный экземпляр не содержит строк из separator, возвращаемый массив состоит из единственного элемента, содержащего данный экземпляр. Если параметр separator равен null или не содержит ни одного знака, в качестве разделителей используются пробелы. Символы пробелов определяются стандартом Юникод и возвращают true при их передаче методу Char.IsWhiteSpace. Однако если параметр separator в вызове этой перегрузки метода равен null, разрешение перегрузки компилятором завершится неудачно. Чтобы однозначно определить вызываемый метод, в коде должен быть указан тип значения null. В следующем примере показано несколько способов однозначно идентифицировать эту перегрузку.


string phrase = "The quick  brown fox";
string[] words;

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

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

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


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

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

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

Если какие-либо элементы в separator состоит из более чем один символ, то только рассмотрен первый символ разделителя этого элемента пропускаются, и все последующие знаки. Например, если один из элементов в separator «10», то попытка для разделения строки «This10is10a10string». возвращает следующий четырехэлементный массив: {«This», «0is», «0a», «0string». }.

Подробные сведения по сравнению

Метод 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 передается параметр separator, который равен null или не содержит ни одного символа, метод использует немного другой набор символов для разбиения строки, чем метод Trim при усечении строки. В .NET Framework 4 оба метода используют одинаковый набор пробельных символов Юникода.

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


using System;

class Example 
{
   public static void Main() 
   {
      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   \"{0}\".", source);
      Console.WriteLine();
      Console.WriteLine("Using the delimiter string:\n   \"{0}\"", 
                        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("   ");
      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 ({0} elements):", 
                        result.Length);
      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) возвращает массив, состоящий из отдельных слов из строки.


using System;

public class Example
{
   public static void Main()
   {
      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, представляющие пустые подстроки соответствия между пунктуациями и знаками пробела.

.NET Framework

Поддерживается в версиях: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework (клиентский профиль)

Поддерживается в версиях: 4, 3.5 с пакетом обновления 1 (SP1)

Переносимая библиотека классов

Поддерживается в версии: Переносимая библиотека классов

Приложения .NET для Магазина Windows

Поддерживается в версии: Windows 8

Приложения .NET для Windows Phone

Поддерживается в версиях: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista с пакетом обновления 2 (SP2), Windows Server 2008 (роль основных серверных компонентов не поддерживается), Windows Server 2008 R2 (роль основных серверных компонентов поддерживается в пакете обновления 1 (SP1) или выше; системы на базе Itanium не поддерживаются)

.NET Framework поддерживает не все версии каждой платформы. Поддерживаемые версии перечислены в разделе Требования к системе для .NET Framework.

Добавления сообщества

Показ:
© 2015 Microsoft