Полное руководство. С# 4.0 - Шилдт Герберт
К основным операциям обработки строк относятся разделение и соединение. Приразделении строка разбивается на составные части, а при соединении строка составляется из отдельных частей. Для разделения строк в классе String определен методSplit(), а для соединения — метод Join().
Существует несколько вариантов метода Split(). Ниже приведены две формыэтого метода, ставшие наиболее часто используемыми, начиная с версии C# 1.0.public string[ ] Split(params char[ ] separator)public string[ ] Split(params char[ ] separator, int count)
В первой форме метода Split() вызывающая строка разделяется на составныечасти. В итоге возвращается массив, содержащий подстроки, полученные из вызывающей строки. Символы, ограничивающие эти подстроки, передаются в массивеseparator. Если массив separator пуст или ссылается на пустую строку, то в качестве разделителя подстрок используется пробел. А во второй форме данного методавозвращается количество подстрок, определяемых параметром count.
Существует несколько форм метода Join(). Ниже приведены две формы, ставшиедоступными, начиная с версии 2.0 среды .NET Framework.public static string Join(string separator, string[] value)public static string Join(string separator, string[] value, int startIndex, int count)
В первой форме метода Join() возвращается строка, состоящая из сцепляемыхподстрок, передаваемых в массиве value. Во второй форме также возвращается строка, состоящая из подстрок, передаваемых в массиве value, но они сцепляются в определенном количестве count, начиная с элемента массива value[startIndex]. В обеих формах каждая последующая строка отделяется от предыдущей разделительнойстрокой, определяемой параметром separator.
В приведенном ниже примере программы демонстрируется применение методовSplit() и Join().// Разделить и соединить строки.using System;class SplitAndJoinDemo { static void Main() { string str = "Один на суше, другой на море."; char[] seps = {' ', '.', ',' }; // Разделить строку на части. string[] parts = str.Split(seps); Console.WriteLine("Результат разделения строки: "); for(int i=0; i < parts.Length; i++) Console.WriteLine(parts[i]); // А теперь соединить части строки. string whole = String.Join(" | ", parts); Console.WriteLine("Результат соединения строки: "); Console.WriteLine(whole); }}
Ниже приведен результат выполнения этой программы.Результат разделения строки:ОдиннасушедругойнамореРезультат соединения строки:Один | на | суше | | другой | на | море
Обратите внимание на пустую строку между словами "суше" и "другой". Делов том, что в исходной строке после слова "суше" следует запятая и пробел, как в подстроке "суше, другой". Но запятая и пробел указаны в качестве разделителей. Поэтомупри разделении данной строки между двумя разделителями (запятой и пробелом)оказывается пустая строка.
Существует ряд других форм метода Split(), принимающих параметр типаStringSplitOptions. Этот параметр определяет, являются ли пустые строки частьюразделяемой в итоге строки. Ниже приведены все эти формы метода Split().public string[] Split(params char[] separator,StringSplitOptions options)public string[] Split(string[] separator, StringSplitOptions options)public string[] Split(params char[] separator, int count, StringSplitOptions options)public string[] Split(string[] separator, int count, StringSplitOptions options)
В двух первых формах метода Split() вызывающая строка разделяется на частии возвращается массив, содержащий подстроки, полученные из вызывающей строки. Символы, разделяющие эти подстроки, передаются в массиве separator. Еслимассив separator пуст, то в качестве разделителя используется пробел. А в третьейи четвертой формах данного метода возвращается количество строк, ограничиваемоепараметром count. Но во всех формах параметр options обозначает конкретный способ обработки пустых строк, которые образуются в том случае, если два разделителяоказываются рядом. В перечислении StringSplitOptions определяются только двазначения: None и RemoveEmptyEntries. Если параметр options принимает значениеNone, то пустые строки включаются в конечный результат разделения исходной строки, как показано в предыдущем примере программы. А если параметр options принимает значение RemoveEmptyEntries, то пустые строки исключаются из конечногорезультата разделения исходной строки.
Для того чтобы стали понятнее последствия исключения пустых строк, попробуемзаменить в предыдущем примере программы строку кодаstring[] parts = str.Split(seps);
следующим фрагментом кода.string[] parts = str.Split(seps, StringSplitOptions.RemoveEmptyEntries);
При выполнении данной программы получится следующий результат.Результат разделения строки:ОдиннасушедругойнамореРезультат соединения строки:Один | на | суше | другой | на | море
Как видите, пустая строка, появлявшаяся ранее из-за того, что после слова "суше"следовали запятая и пробел, теперь исключена.
Разделение является очень важной процедурой обработки строк, поскольку с егопомощью нередко получают отдельные лексемы, составляющие исходную строку. Так,в программе ведения базы данных может возникнуть потребность разделить с помощью метода Split() строку запроса "показать все остатки больше 100" на отдельные части, включая подстроки "показать" и "100". В процессе разделения исключаются разделители, поэтому в итоге получается подстрока "показать" (без начальныхи конечных пробелов), а не подстрока "показать". Этот принцип демонстрируетсяв приведенном ниже примере программы, где строки, содержащие такие бинарныематематические операции, как 10 + 5, преобразуются в лексемы, а затем эти операциивыполняются и выводится конечный результат.// Преобразовать строки в лексемы.using System;class TokenizeDemo { static void Main() { string[] input = { "100 + 19", "100 / 3,3", "-3 * 9", "100 - 87" }; char[] seps = {' '}; for(int i=0; i < input.Length; i++) { // разделить строку на части string[] parts = input[i].Split(seps); Console.Write("Команда: "); for(int j=0; j < parts.Length; j++) Console.Write(parts[j] + " "); Console.Write(", результат: "); double n = Double.Parse(parts[0]); double n2 = Double.Parse(parts[2]); switch(parts[1]) { case "+": Console.WriteLine(n + n2); break; case Console.WriteLine(n - n2); break; case "*": Console.WriteLine(n * n2); break; case "/": Console.WriteLine(n / n2); break; } } }}
Вот к какому результату приводит выполнение этой программы.Команда: 100 + 19 , результат: 119Команда: 100 / 3,3 , результат: 30,3030303030303Команда: -3 * 9 , результат: -27Команда: 100 - 87 , результат: 13
Начиная с версии 4.0, в среде .NET Framework стали доступными следующие дополнительные формы метода Join().public static string Join(string separator, params object[] values)public static string Join(string separator, IEnumerable<string>[] values)public static string Join<T>(string separator, IEnumerable<T>[] values)
В первой форме рассматриваемого здесь метода возвращается строка, содержащаястроковое представление объектов из массива values. Во второй форме возвращаетсястрока, содержащая результат сцепления коллекции строк, обозначаемой параметромvalues. И в третьей форме возвращается строка, содержащая результат сцеплениястроковых представлений объектов из коллекции, обозначаемой параметром values.Во всех трех случаях каждая предыдущая строка отделяется от последующей разделителем, определяемым параметром separator.Заполнение и обрезка строк
Иногда в строке требуется удалить начальные и конечные пробелы. Такая операцияназывается обрезкой и нередко требуется в командных процессорах. Например, программа ведения базы данных способна распознавать команду "print", но пользовательможет ввести эту команду с одним иди несколькими начальными и конечными пробелами. Поэтому перед распознаванием введенной команды необходимо удалить всеподобные пробелы. С другой стороны, строку иногда требуется заполнить пробелами,чтобы она имела необходимую минимальную длину. Так, если подготавливается вывод результатов в определенном формате, то каждая выводимая строка должна иметьопределенную длину, чтобы сохранить выравнивание строк. Для упрощения подобныхопераций в C# предусмотрены соответствующие методы.
Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Полное руководство. С# 4.0 - Шилдт Герберт, относящееся к жанру Программирование. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

