Главная страница
Навигация по странице:

  • Поиск строки

  • Метод

  • Разбиение и сборка строк

  • Справочник по C# Герберт Шилдт ббк 32. 973. 26018 75 Ш57 удк 681 07 Издательский дом "Вильямс" Зав редакцией


    Скачать 5.05 Mb.
    НазваниеСправочник по C# Герберт Шилдт ббк 32. 973. 26018 75 Ш57 удк 681 07 Издательский дом "Вильямс" Зав редакцией
    АнкорC #.pdf
    Дата08.12.2017
    Размер5.05 Mb.
    Формат файлаpdf
    Имя файлаC #.pdf
    ТипСправочник
    #10795
    страница36 из 52
    1   ...   32   33   34   35   36   37   38   39   ...   52
    Конкатенация строк
    Существует два способа конкатенации (объединения) двух или больше строк. Во- первых, как показано в главе 7, можно использовать для этого оператор “
    +
    ”. Во-вторых, можно применить один из методов конкатенации, определенных в классе
    String
    Несмотря на то что оператор “
    +
    ” — самое простое решение во многих случаях, методы конкатенации предоставляют дополнительные возможности.
    Метод, который выполняет конкатенацию, именуется
    Concat()
    , а его простейший формат таков: public static string Concat(string
    str1
    , string
    str2
    )
    Метод возвращает строку, которая содержит строку
    str2
    , присоединенную к концу строки
    str1
    Еще один формат метода
    Concat()
    позволяет объединить три строки: public static string Concat( string
    str1
    , string
    str2
    , string
    str3
    )
    При вызове этой версии возвращается строка, которая содержит конкатенированные строки
    str1
    ,
    str2
    и
    str3
    . По правде говоря, для выполнения описанных выше операций все же проще использовать оператор “
    +
    ”, а не метод
    Concat()
    А вот следующая версия метода
    Concat()
    объединяет произвольное число строк, что делает ее весьма полезной для программиста: public static string Concat(params string[]
    strs
    )

    548
    Часть II. Библиотека C#
    Здесь метод
    Concat() принимает переменное число аргументов и возвращает результат их конкатенации. Использование этой версии метода
    Concat()
    демонстрируется в следующей программе:
    // Демонстрация использования метода Concat(). using System; class ConcatDemo { public static void Main() { string result = String.Concat(
    "Мы ", "тестируем ",
    "один ", "из ", "методов ",
    "конкатенации ", "класса ",
    "String.");
    Console.WriteLine("Результат: " + result);
    }
    }
    Результаты выполнения этой программы таковы:
    Результат: Мы тестируем один из методов конкатенации класса
    String.
    Некоторые версии метода
    Concat()
    принимают не string
    -, a object
    -ссылки.
    Они извлекают строковое представление из передаваемых им объектов и возвращают строку, содержащую конкатенированные строки. Форматы этих версий метода
    Concat()
    таковы: public static string Concat(object
    v1
    , object
    v2
    ) public static string Concat( object
    v1
    , object
    v2
    , object
    v3
    ) public static string Concat(params object[]
    v
    )
    Первая версия возвращает строку, которая содержит строковое представление объекта
    v2
    , присоединенное к концу строкового представления объекта
    v1
    . Вторая возвращает строку, которая содержит конкатенированные строковые представления объектов
    v1
    ,
    v2
    и
    v3
    . Третья возвращает строку, содержащую конкатенированные строковые представления аргументов, переданных в виде “сборного” объекта
    v
    . Чтобы вы могли оценить потенциальную пользу этих методов, рассмотрим следующую программу:
    // Еще один способ использования метода Concat(). using System; class ConcatDemo { public static void Main() { string result = String.Concat("Привет ", 10, " ",
    20.0,
    "
    ", false,
    "
    ",
    23.45M);
    Console.WriteLine("Результат: " + result);
    }
    }

    Глава 20. Строки и форматирование
    549
    Результаты выполнения этой программы таковы:
    Результат: Привет 10 20 False 23.45
    В этом примере метод
    Concat()
    конкатенирует строковые представления различных типов данных. Для получения строкового представления каждого аргумента здесь вызывается метод
    ToString()
    , связанный с соответствующим аргументом. Так, для значения 10 вызывается метод
    Int32.ToString()
    . Методу
    Concat()
    остается лишь объединить эти строки и возвратить результат. Этот формат метода
    Concat()
    очень удобен, поскольку позволяет программисту не получать вручную строковые представления до самой конкатенации.
    Поиск строки
    В классе
    String есть два набора методов, которые позволяют найти заданную строку (подстроку либо отдельный символ). При этом можно заказать поиск первого либо последнего вхождения искомого элемента. Чтобы отыскать первое вхождение символа или подстроки, используйте метод
    IndexOf()
    , который имеет два таких формата: public int IndexOf(char
    ch
    ) public int IndexOf(string
    str
    )
    Метод
    IndexOf()
    , используемый в первом формате, возвращает индекс первого вхождения символа
    ch
    в вызывающей строке. Второй формат позволяет найти первое вхождение строки
    str
    . В обоих случаях возвращается значение — 1, если искомый элемент не найден.
    Чтобы отыскать последнее вхождение символа или подстроки, используйте метод
    LasItndexOf()
    , который имеет два таких формата: public int LastIndexOf(char
    ch
    ) public int LastIndexOf(string
    str
    )
    Метод
    LastIndexOf()
    , используемый в первом формате, возвращает индекс последнего вхождения символа
    ch
    в вызывающей строке. Второй формат позволяет найти последнее вхождение строки
    str
    . В обоих случаях возвращается значение — 1, если искомый элемент не найден.
    В классе
    String определено два дополнительных метода поиска:
    IndexOfAny()
    и
    LastIndexOfAny()
    . Они выполняют поиск первого или последнего символа, который совпадает с любым элементом заданного набора символов. Вот их форматы: public int IndexOfAny(char[]
    a
    ) public int LastIndexOfAny(char[]
    a
    )
    Метод
    IndexOfAny()
    возвращает индекс первого вхождения любого символа из массива
    а
    , который обнаружится в вызывающей строке. Метод
    LastIndexOfAny()
    возвращает индекс последнего вхождения любого символа из массива
    а
    , который обнаружится в вызывающей строке. В обоих случаях возвращается значение — 1, если совпадение не обнаружится.
    При работе со строками часто возникает необходимость узнать, начинается ли строка с заданной подстроки либо оканчивается ею. Для таких ситуаций используются методы
    StartsWith() и
    EndsWith()
    : public bool StartsWith(string
    str
    ) public bool EndsWith(string
    str
    )
    Метод
    StartsWith()
    возвращает значение true
    , если вызывающая строка начинается с подстроки, переданной в параметре
    str
    . Метод
    EndsWith()
    возвращает значение true
    , если вызывающая строка оканчивается подстрокой, переданной в параметре
    str
    . В случае неудачного исхода оба метода возвращают значение false

    550
    Часть II. Библиотека C#
    Использование методов поиска строк демонстрируется в следующей программе:
    // Поиск строк. using System; class StringSearchDemo { public static void Main() { string str =
    "C# обладает мощными средствами обработки строк."; int idx;
    Console.WriteLine("str: " + str); idx = str.IndexOf('с');
    Console.WriteLine(
    "Индекс первого вхождения буквы 'с': " + idx); idx = str.LastIndexOf('с');
    Console.WriteLine(
    "Индекс последнего вхождения буквы 'с': " + idx); idx = str.IndexOf("ми");
    Console.WriteLine(
    "Индекс первого вхождения подстроки \"ми\": " + idx); idx = str.LastIndexOf("ми");
    Console.WriteLine(
    "Индекс последнего вхождения подстроки \"ми\": " + idx); char[] chrs = { 'а', 'б', 'в' }; idx = str.IndexOfAny(chrs);
    Console.WriteLine(
    "Индекс первой из букв 'а', 'б' или 'в': " + idx); if(str.StartsWith("C# обладает"))
    Console.WriteLine(
    "str начинается с подстроки \"C# обладает\""); if(str.EndsWith("строк."))
    Console.WriteLine(
    "str оканчивается подстрокой \"строк.\"");
    }
    }
    Результаты выполнения этой программы таковы: str: C# обладает мощными средствами обработки строк.
    Индекс первого вхождения буквы 'с': 20
    Индекс последнего вхождения буквы 'с': 41
    Индекс первого вхождения подстроки "ми": 17
    Индекс последнего вхождения подстроки "ми": 28
    Индекс первой из букв 'а', 'б' или 'в': 4 str начинается с подстроки "C# обладает" str оканчивается подстрокой "строк."
    Некоторые методы поиска имеют дополнительные форматы, которые позволяют начать поиск с заданного индекса или указать диапазон поиска. Все версии методов

    Глава 20. Строки и форматирование
    551 поиска символов в строке, которые определены в классе
    String
    , приведены в табл. 20.2.
    Таблица 20.2. Методы поиска символов в строке, определенные в классе String
    Метод
    Описание
    public bool EndsWith( string
    str
    )
    Возвращает значение true
    , если вызывающая строка оканчивается подстрокой, переданной в параметре
    str
    . В противном случае метод возвращает значение
    false
    public int IndexOf( char
    ch
    )
    Возвращает индекс первого вхождения символа
    ch
    в вызывающей строке. Возвращает значение -1, если искомый символ не обнаружен public int IndexOf( string
    str
    )
    Возвращает индекс первого вхождения подстроки
    str
    в вызывающей строке. Возвращает значение -1, если искомая подстрока не обнаружена public int IndexOf( char
    ch
    , int
    start
    )
    Возвращает индекс первого вхождения символа
    ch
    в вызывающей строке. Поиск начинается с элемента, индекс которого задан параметром
    start
    . Возвращает значение -1, если искомый символ не обнаружен public int IndexOf( string
    str
    , int
    start
    )
    Возвращает индекс первого вхождения подстроки
    str
    в вызывающей строке. Поиск начинается с элемента, индекс которого задан параметром
    start
    . Возвращает значение -1, если искомая подстрока не обнаружена public int IndexOf( char
    ch
    , int
    start
    , int
    count
    )
    Возвращает индекс первого вхождения символа
    ch
    в вызывающей строке. Поиск начинается с элемента, индекс которого задан параметром
    start
    , и охватывает
    count
    элементов. Метод возвращает значение -1, если искомый символ не обнаружен public int IndexOf( string
    str
    , int
    start
    , int
    count
    )
    Возвращает индекс первого вхождения подстроки
    str
    в вызывающей строке. Поиск начинается с элемента, индекс которого задан параметром
    start
    , и охватывает
    count
    элементов. Метод возвращает значение -1, если искомая подстрока не обнаружена public int IndexOfAny( char[]
    a
    )
    Возвращает индекс первого вхождения любого символа из последовательности а, который будет обнаружен в вызывающей строке. Возвращает значение -1, если совпадения символов не обнаружено public int IndexOfAny( char[]
    a
    , int
    start
    )
    Возвращает индекс первого вхождения любого символа из последовательности
    а
    , который будет обнаружен в вызывающей строке. Поиск начинается с элемента, индекс которого задан параметром
    start
    . Метод возвращает значение -1, если совпадения символов не обнаружено public int IndexOfAny( char[]
    a
    , int
    start
    , int
    count
    )
    Возвращает индекс первого вхождения любого символа из последовательности
    а
    , который будет обнаружен в вызывающей строке. Поиск начинается с элемента, индекс которого задан параметром
    start
    , и охватывает
    count
    элементов. Метод возвращает значение -1, если совпадения символов не обнаружено public int LastIndexOf( char
    ch
    )
    Возвращает индекс последнего вхождения символа
    ch
    в вызывающей строке. Возвращает значение -1, если искомый символ не обнаружен public int LastIndexOf( string
    str
    )
    Возвращает индекс последнего вхождения подстроки
    str
    в вызывающей строке. Возвращает значение -1, если искомая подстрока не обнаружена public int LastIndexOf( char
    ch
    , int
    start
    )
    Возвращает индекс последнего вхождения символа
    ch
    , обнаруженного в пределах диапазона вызывающей строки. Поиск выполняется в обратном порядке, начиная с элемента, индекс которого задан параметром
    start
    , и заканчивая элементом с нулевым индексом. Метод возвращает значение -1, если искомый символ не обнаружен

    552
    Часть II. Библиотека C#
    Окончание табл. 20.2
    Метод
    Описание
    public int LastIndexOf( string
    str
    , int
    start
    )
    Возвращает индекс последнего вхождения подстроки
    str
    , обнаруженной в пределах диапазона вызывающей строки. Поиск выполняется в обратном порядке, начиная с элемента, индекс которого задан параметром
    start
    , и заканчивая элементом с нулевым индексом. Метод возвращает значение -1, если искомая подстрока не обнаружена public int LastIndexOf( char
    ch
    , int
    start
    , int
    count
    )
    Возвращает индекс последнего вхождения символа
    ch
    , обнаруженного в пределах диапазона вызывающей строки. Поиск выполняется в обратном порядке, начиная с элемента, индекс которого задан параметром
    start
    , и охватывая
    count
    элементов.
    Метод возвращает значение -1, если искомый символ не обнаружен public int LastIndexOf( string
    str
    , int
    start
    , int
    count
    )
    Возвращает индекс последнего вхождения подстроки
    str
    , обнаруженной в пределах диапазона вызывающей строки. Поиск выполняется в обратном порядке, начиная с элемента, индекс которого задан параметром
    start
    , и охватывая
    count
    элементов.
    Метод возвращает значение -1, если искомая подстрока не обнаружена public int
    LastIndexOfAny( char[]
    a
    )
    Возвращает индекс последнего вхождения любого символа из последовательности
    а
    , который будет обнаружен в вызывающей строке. Возвращает значение -1, если совпадения символов не обнаружено public int
    LastIndexOfAny( char[]
    a
    , int
    start
    )
    Возвращает индекс последнего вхождения любого символа из последовательности
    а
    , который будет обнаружен в вызывающей строке. Поиск выполняется в обратном порядке, начиная с элемента, индекс которого задан параметром
    start
    , и заканчивая элементом с нулевым индексом. Возвращает значение -1, если совпадения символов не обнаружено public int
    LastIndexOfAny( char[]
    a
    , int
    start
    , int
    count
    )
    Возвращает индекс последнего вхождения любого символа из последовательности
    а
    , который будет обнаружен в вызывающей строке. Поиск выполняется в обратном порядке, начиная с элемента, индекс которого задан параметром
    start
    , и охватывая count элементов. Возвращает значение -1, если совпадения символов не обнаружено public bool StartsWith( string
    str
    )
    Возвращает значение true
    , если вызывающая строка начинается строкой, переданной в параметре
    str
    . В противном случае метод возвращает значение false
    Разбиение и сборка строк
    Двумя важными операциями обработки строк являются разбиение (декомпозиция) и сборка. При разбиении строка делится на составные части. А при сборке строка
    “собирается” из отдельных частей. Для разбиения строк в классе string определен метод
    Split()
    , а для сборки — метод
    Join()
    Форматы использования метода
    Split()
    таковы: public string[] split(params char[]
    seps
    ) public string[] split(params char[]
    seps
    , int
    count
    )
    Метод первого формата предназначен для разбиения вызывающей строки на подстроки, которые возвращаются методом в виде строкового массива. Символы, которые отделяют подстроки одну от другой, передаются в массиве
    seps
    . Если параметр
    seps
    содержит null
    -значение, в качестве разделителя подстрок используется пробел. Метод второго формата отличается от первого тем, что ограничивает количество возвращаемых подстрок значением
    count
    .
    Рассмотрим теперь форматы применения метода
    Join()
    :

    Глава 20. Строки и форматирование
    553 public static string Join(string
    sep
    , string[]
    strs
    ) public static string Join(string
    sep
    , string[]
    strs
    , int
    start
    , int
    count
    )
    Метод
    Join()
    в первом формате возвращает строку, которая содержит конкатенированные строки, переданные в массиве
    strs
    . Второй формат позволяет собрать строку, которая будет содержать
    count
    конкатенированных строк, переданных в массиве
    strs
    , начиная со строки
    strs[start]
    . В обоих случаях каждая строка, составляющая результат, отделяется от следующей разделительной строкой, заданной параметром
    sep
    Использование методов
    Split()
    и
    Join()
    демонстрируется в следующей программе:
    // Демонстрация разбиения и сборки строк. using System; class SplitAndJoinDemo { public 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()
    для разложения такого запроса, как “отобразить все балансы, превышающие значение 100” на отдельные составляющие (например, “отобразить” и “100”). В этом процессе разделители

    1   ...   32   33   34   35   36   37   38   39   ...   52


    написать администратору сайта