Скачиваний:
65
Добавлен:
24.03.2015
Размер:
269.31 Кб
Скачать

8.4. Некоторые методы и свойства класса String

Хотя мы ещё не рассматривали механизм и синтаксис наследования; и не умеем конструировать производные классы, но уже сейчас полезно отметить, что класс string есть sealed-класс, то есть он не может служить базовым для других производных классов.

Наиболее важным свойством класса string является свойство Length, позволяющее получить длину (в количестве символов) конкретной строки (объекта класса string). Значением выражения "\tЧисло\u0068".Length будет 7, так как каждая эскейп-последовательность представляет только один символ.

Среди многочисленных методов класса string рассмотрим (и то очень кратко) только некоторые.

int CompareTo() - метод который сравнивает две строки и возвращает целочисленное значение. Для двух строк S1, S2 результат положительный, если S1>S2, отрицательный, если S1<S2 и нулевой, если S1 == S2. Сравнение строк выполняется лексикографически.

static string Concat() - метод (их несколько) выполняет конкатенацию строк-параметров. Аргументов-строк может быть два, три или произвольное количество.

static string Copy() - статический метод возвращает копию существующей строки.

static string Format() - статический метод, формирующий строку на основе набора параметров. Этот метод подробно рассматривается в §8.5.

int IndexOf() - нестатический метод поиска в вызывающей строке подстроки, заданной параметром. Возвращает индекс или -1, если поиск неудачен. Поиск с начала строки.

string Insert() - нестатический метод для вставки строки-параметра в копию вызывающей строки.

static string Join() - статический метод, объединяющий в одну строку строки массива-параметра. Первый параметр типа string задаёт разделитель, которым будут отделены друг от друга в результирующей строке элементы массива.

int LastIndexOf() - нестатический метод поиска в вызывающей строке подстроки, заданной параметром. Возвращает индекс или -1, если поиск неудачен. Поиск с конца строки.

string Remove() - удаляет символы из копии строки.

string Replace() - заменяет символы в копии строки.

string [] Split() - формирует массив строк из фрагментов вызывающей строки. Параметр типа char[] задаёт разделители, которыми в строке разделены фрагменты.

char [] ToCharArray() - копирует символы вызывающей строки в массив типа char[].

string Trim() - удаляет вхождение заданных символов (например, пробела) в начале и в конце строки.

string Substring() - выделяет из строки подстроку. Параметры задают начало и длину выделяемой части строки.

8.5. Форматирование строк

При выводе, например, с помощью Console.Write() значений базовых типов (например, int или double) они автоматически преобразуются в символьные строки. Если программиста не устраивает автоматически выбранный формат их внешнего представления, он может его изменить. Дляэтого можно воспользоваться статическим методом Format() класса string или использовать так называемую строку форматирования в качестве первого параметра методов, поддерживающих форматирование, например, Console.Write() и Console.WriteLine(). В обоих случаях правила подготовки исходных данных для получения желаемого результата (новой строки) одинаковы. Рассмотрим эти правила применительно к методу класса string:

public static string Format(string form, params object[] ar).

Так как синтаксис заголовков методов (функций) мы формально ещё не рассматривали, поясним элементы приведённого заголовка.

public - спецификатор доступа. Указывает что метод открытый, т.е. доступен вне класса string.

static - модификатор, относящий метод к классу в целом, а не к его объектам.

string - тип возвращаемого методом значения

Format - имя метода.

form - параметр, представляющий строку форматирования.

params - модификатор, указывающий, что следующий за ним массив-параметр аг может быть заменён при обращении к функции любым количеством аргументов (включая нуль, т.е. аргументы могут отсутствовать).

object - тип элементов массива-параметра аг. Так как object - это базовый класс для всех типов языка С#, то аргументы, соответствующие элементам массива object[] ar, могут иметь любой тип.

Итак, метод string.Format() возвращает строку, построенную на основе строки форматирования и значений аргументов, следующих за этой строкой в обращении к методу Format().

Строка форматирования включает неизменяемые символы и конструкции, называемые полями подстановок. Структура поля подстановки: {N[,W][:S[R]]>, где N - номер аргумента; W - ширина поля; S - спецификатор формата; R - спецификатор точности.

Квадратные скобки в поля подстановки не входят и обозначают необязательность ограниченного ими фрагмента (элемента) поля. В поле подстановки разрешено опускать все элементы кроме фигурных скобок и номера аргумента. Именно поэтому все остальные элементы поля подстановки мы ограничили квадратными скобками. Воспользуемся этим правилом, чтобы привести первый пример.

int num = 23, den = 6;

string result; // ссылка на строку, с результатом

string form = "Числитель: {0}, знаменатель: {1}, дробь: {0}/{1}=={2}";

result = string.Format(form, num, den, num / den);

Console.WriteLine(result);

В примере определены две ссылки result и form на объекты типа string. Значение строки, связанной со ссылкой form, определено инициализирующей строковой константой. В ней пять полей подстановок. Номера в полях указывают, символьные представления значений каких (по счету, начиная с 0) аргументов будут подставлены вместо соответствующих полей. В

обращении к методу Format() первый аргумент - строка form, затем num -аргумент, с номером 0, den - аргумент, которому соответствует номер 1, num/den - выражение, значение которого воспринимается как аргумент с номером 2. В результате выполнения подстановок метод Format() возвращает строку, ссылка на которую присвоена переменной result. Выводя эту строку на консоль, получим:

Числитель: 23, знаменатель: 6, дробь: 23/6==3

(Обратите внимание на округление результата целочисленного деления.)

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

Спецификатор формата S задаёт вид изображаемого значения. Для разных типов данных этот спецификатор выбирается по-разному. Следующая за ним цифра - спецификатор точности R - влияет на формируемое значение, и это влияние зависит от спецификатора формата.

Таблица 8.1. Спецификаторы формата S и точности R.

Спецификатор

Формат

Роль спецификатора точности R

С или с

валютный

Количество десятичных разрядов

D или d

целочисленный

Минимальное число цифр

Е или е

экспоненциальный

Число разрядов после точки

F или f

с фиксированной точкой

Число разрядов после точки

G или g

короткий из Е или F

Подобен е или F

X или х

шестнадцатеричный

Минимальное число цифр

Пример :

double dou = 1234.567;

form = "Спецификация E4: {0:E4}, спецификация F4: {0:F4}";

result = string.Format(form, dou);

Console.WriteLine(result);

В полях подстановки строки форматирования опущена ширина поля и предполагается дважды использовать только один аргумент (с номером 0). Выводимая строка: Спецификация Е4: 1,2346Е+003, спецификация F4: 1234,5670

Обратите внимание на округление при выводе по формату Е4 и на дополнительный нуль в изображении числа с фиксированной точкой привыводе по формату F4. Это определяется спецификатором точности, равным 4.

Пример с целочисленным значением, выводимым с разными основаниями в поля из 4-х позиций. Обратите внимание, что ширина первого поля отрицательна:

form = "Основание 10: '{0,-4:D}'\n основание 16: '{0,4:X}'";

Console.WriteLine(form, num);

Результат в консольном окне:

Основание 10: ’23 ’

основание 16: ‘ 17’

В этом примере форматирование выполняется непосредственно при обращении к методу WriteLine(). Первый аргумент выступает в роли форматной строки, а вызов метода string.Format() осуществляется неявно.

Если в этом примере в полях подставки указать спецификаторы точности, то в изображениях целых чисел могут появиться незначащие нули. Пример:

form = "Основание 10: '{0,-4:D3}'\n основание 16: '{0,4:X3}'";

Console.WriteLine(form, num);

Результат:

Основание 10: ‘023 ’

основание 16: ‘ 017’

Замечание: если в поле подстановки указана ширина, недостаточная для представления выводимого значения, то ширина поля будет автоматически увеличена до необходимого количества позиций.

8.6.Строка как контейнер

Как мы уже знаем, оператор foreach предназначен для последовательного перебора всех элементов некоторого контейнера. Если в качестве контейнера выступает массив, например, с элементами типа long, то для просмотра значений всех его элементов можно использовать цикл с заголовком

foreach (long cell in массив)

В этом цикле итерационная переменная cell имеет тот же тип, что и элементы массива и последовательно принимает значения его элементов.

Если нужно применить такой же цикл для перебора элементов объекта типа string, то используется итерационная переменная типа char. В качестве контейнера выступает строковый литерал, либо объект класса string (либо ссылка на такой объект). Пример со строковым литералом:

foreach (char numb in "0123")

Console.Write("\t" + numb + "->" + (int)numb);

Результат:

0->48 l->49 2->50 3->51

Соседние файлы в папке Lekc_C#