Курс лекций для студентов специальности i-31 03 04 Информатика всех форм обучения Минск 2010



страница2/29
Дата09.08.2019
Размер0.64 Mb.
#126834
ТипКурс лекций
1   2   3   4   5   6   7   8   9   ...   29

2.2. Дата и время


В пространстве имён System определены три неизменяемые структуры для работы с датой и временем: TimeSpan, DateTime и DateTimeOffset.

Структура TimeSpan представляет интервал времени с точностью 100 нс. Для создания экземпляра структуры можно использовать один из её конструкторов, статические методы вида TimeSpan.FromЕдиницыВремени() или разность двух переменных типа DateTime.

var ts1 = new TimeSpan(20); // "тики", каждый = 100 нс

var ts2 = new TimeSpan(1, 20, 500); // часы, минуты, секунды

var ts3 = TimeSpan.FromHours(3.5);

Структура TimeSpan перегружает операции сравнения и аддитивные операции. Свойства TimeSpan позволяют обратиться либо к отдельному временному компоненту интервала (свойства Days, Hours, Minutes, Seconds, Milliseconds), либо выразить весь интервал через указанную единицу времени (TotalDays, TotalHours и т.п.)

TimeSpan ts = TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1);

Console.WriteLine(ts.Days); // 9

Console.WriteLine(ts.Seconds); // 59

Console.WriteLine(ts.TotalDays); // 9.99998842592593

Console.WriteLine(ts.TotalSeconds); // 863999

Структуры DateTime и DateTimeOffset предназначены для хранения даты и времени. Интервал дат  от 1 января 1 года нашей эры до 31 декабря 9999 года, точность времени – 100 нс. DateTimeOffset дополнительно позволяет сохранить смещение всемирного координированного времени (UTC offset), что даёт возможность правильно сравнивать даты разных часовых поясов.

Структура DateTime имеет конструкторы, позволяющие указать для создаваемого экземпляра год, месяц, день, часы, минуты, секунды, миллисекунды. Дополнительно можно задать параметр из перечисления DateTimeKind, который показывает, какое именно время содержит экземпляр (Unspecified, Local, Utc). Также можно задать используемый датой календарь – это влияет на алгоритм вычисления некоторых свойств даты. Конструкторы структуры DateTimeOffset дополнительно позволяют указать смещение UTC как значение TimeSpan1:

var dt1 = new DateTime(2012, 12, 21);

var dt2 = new DateTime(2012, 12, 21, 12, 0, 0, DateTimeKind.Local);

var dt3 = new DateTime(2012, 12, 21, new PersianCalendar());

var dto = new DateTimeOffset(dt1, TimeSpan.FromHours(-6));

Определено неявное преобразование DateTime к DateTimeOffset. Такие свойства структуры DateTimeOffset как UtcDateTime, LocalDateTime, DateTime дают возможность получить значение времени UTC в виде DateTime.

Используя DateTime и DateTimeOffset, текущее время и дату можно узнать при помощи свойств Now, Today, UtcNow. Обе структуры содержат свойства для чтения отдельных временных компонентов, а также методы для увеличения временных компонент на указанную (возможно, отрицательную) величину. Структуры DateTime и DateTimeOffset также перегружают операции сравнения и аддитивные операции.

var dt = DateTime.Today; // текущая дата (без времени)

Console.WriteLine(dt.Month); // узнаем текущий месяц

Console.WriteLine(dt.DayOfWeek); // и день недели

var changed_dt = dt.AddDays(-3.5);

DateTimeOffset dto = DateTime.Now; // неявное преобразование

Console.WriteLine(dto.Offset); // узнаем UTC offset

2.3. работа со строками и текстом


Для представления отдельных символов в платформе .NET применяется структура System.Char, которая использует Unicode-кодировку UTF-16. C# содержит целочисленный тип char, служащий псевдонимом для Char.

В структуре Char имеется экземплярный метод сравнения CompareTo(). Большинство статических методов структуры Char нужны для выяснения принадлежности символа к одной из Unicode-категорий. Многие методы перегружены: они могут принимать в качестве аргумента либо отдельный символ, либо строку и номер символа в ней.

Таблица 2

Статические методы структуры System.Char



Имя метода

Описание

ConvertFromUtf32()

Преобразует целочисленный суррогатный UTF-код в строку

ConvertToUtf32()

Преобразует пару суррогатных символов1 в UTF-код

GetNumericValue()

Возвращает численное значение символа, если он является цифрой, и -1.0 в противном случае

GetUnicodeCategory()

Метод возвращает элементы перечисления UnicodeCategory, описывающего категорию символа

IsControl()

Возвращает true, если символ является управляющим

IsDigit()

Возвращает true, если символ является десятичной цифрой

IsLetter()

Возвращает true, если символ является буквой

IsLetterOrDigit()

Возвращает true, если символ является буквой или цифрой

IsLower()

Возвращает true, если символ – это буква в нижнем регистре

IsNumber()

Возвращает true, если символ является десятичной или шестнадцатеричной цифрой

IsPunctuation()

Возвращает true, если символ является знаком препинания

IsSeparator()

Возвращает true, если символ является разделителем

IsSurrogate()

Возвращает true, если символ является суррогатным

IsUpper()

Возвращает true, если символ – это буква в верхнем регистре

IsWhiteSpace()

Возвращает true, если символ является пробельным. К пробельным символам относятся, помимо пробела, и другие символы, например, символ конца строки и символ перевода каретки

Parse()

Преобразует строку в символ. Строка должна состоять из одного символа, иначе генерируется исключение

ToLower()

Приводит символ к нижнему регистру

ToUpper()

Приводит символ к верхнему регистру

TryParse()

Пытается преобразовать строку в символ

Основным типом для работы со строками является класс System.String (псевдоним в C#  string). Объекты класса String объявляются, как и все прочие объекты простых типов – с явным или неявным вызовом конструктора класса. Чаще всего при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковым литералом. Но у класса String достаточно много конструкторов. Они позволяют сконструировать строку из массива символов или символа, повторенного заданное число раз.

Над строками определены следующие операции: присваивание (=), операции проверки равенства (== и !=), конкатенация строк (+), взятие индекса ([]). Операция присваивания строк имеет важную особенность. Поскольку String – это ссылочный тип, то в результате присваивания создаётся ссылка на константную строку, хранимую в динамической памяти. С одной и той же строковой константой в динамической памяти может быть связано несколько переменных. Но когда одна из переменных получает новое значение, она связывается с новым константным объектом в динамической памяти. Остальные переменные сохраняют свои связи. Для программиста это означает, что семантика присваивания строк аналогична семантике присваивания типов значений.

Возможность взятия индекса при работе со строками отражает тот факт, что строку можно рассматривать как массив и получать каждый её символ. Символ строки доступен только для чтения, но не для записи.

Статические элементы класса System.String. объединены в табл. 3.

Таблица 3

Статические элементы класса System.String



Имя элемента

Описание

Empty

Свойство только для чтения, которое возвращает пустую строку

Compare()

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

CompareOrdinal()

Сравнение двух строк. Реализации метода позволяют сравнивать как строки, так и подстроки. Сравниваются коды символов

Concat()

Конкатенация произвольного числа строк

Concat()

Метод выполняет проход по указанной коллекции, преобразование каждого элемента в строку и конкатенацию полученных строк

Copy()

Создает копию строки

Format()

Выполняет форматирование строки в соответствии с заданными спецификациями формата

Join()

Соединение элементов массива строк или коллекции строк в единую строку. При этом между элементами вставляются разделители

Join()

Метод выполняет проход по указанной коллекции, преобразование каждого элемента в строку и соединение полученных строк. При этом между элементами вставляются разделители

IsNullOrEmpty()

Проверяет, является ли параметр пустой строкой или null

IsNullOrWhiteSpace()

Проверяет, является ли параметр пустой строкой, null или состоит только из пробельных символов

Сводка экземплярных методов класса String, приведённая в табл. 4, даёт полную картину широких возможностей, имеющихся для работы со строками. Заметим, что класс String относится к неизменяемым типам (immutable types). Ни один из экземплярных методов не меняет значения строки, у которой вызывается. Конечно, некоторые из методов создают и возвращают в качестве результата новые строки.

Таблица 4

Экземплярные методы System.String


Имя метода

Описание

CompareTo()

Сравнивает строки для выяснения порядка

Insert()

Вставляет подстроку в заданную позицию

Remove()

Удаляет подстроку в заданной позиции

Replace()

Заменяет подстроку в заданной позиции на новую подстроку

Split()

Разбивает строку на массив слов. Допускает указание разделителя слов (по умолчанию – пробел), а также опции для удаления пустых слов из итогового массива

Substring()

Выделяет подстроку в заданной позиции

CopyTo()

Копирует указанный фрагмент строки в массив символов

Conatains()

Определяет вхождение заданной подстроки

IndexOf(),

IndexOfAny(),

LastIndexOf(),

LastIndexOfAny()



Определяются индексы первого и последнего вхождения заданной подстроки или любого символа из заданного набора

StartsWith(),

EndsWith()



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

PadLeft(),

PadRight()



Выполняют «набивку» нужным числом пробелов в начале или в конце строки

Trim(),

TrimStart(),

TrimEnd()


Удаляются пробелы в начале и в конце строки, или только с одного её конца

ToCharArray()

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

ToLower(), ToUpper(),

ToLowerInvariant(),

ToUpperInvariant()


Изменение регистра символов строки

Так как класс String представляет неизменяемый объект, многократное (например, в цикле) использование методов для модификации строки снижает производительность. В пространстве имен System.Text размещён класс StringBuilder для работы с редактируемой строкой. StringBuilder применяет для хранения символов внутренний массив, который изменяется при редактировании строки (новые экземпляры объекта не создаются). Набор методов класса StringBuilder поддерживает основные операции редактирования строк, а также получение «нормальной» строки из внутреннего массива.

// создаём объект на основе строки и указываем ёмкость массива

StringBuilder sb = new StringBuilder("start", 300);

for (int i = 0; i < 100; i++)

{

sb.Append("abc"); // много раз добавляем к строке текст



}

string s = sb.ToString(); // получаем нормальную строку

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

Коротко опишем синтаксис построения регулярных выражений1. В простейшем случае регулярное выражение – это последовательность букв или цифр. Тогда оно определяет именно то, что представляет. Но, как правило, регулярное выражение содержит некоторые особые спецсимволы. Первый набор таких спецсимволов позволяет определить символьные множества (табл. 5).

Таблица 5

Символьные множества в регулярных выражениях



Выражение

Значение

Выражение, обратное по смыслу («не»)

[abcdef]

Один символ из списка

[^abcdef]

[a-f]

Один символ из диапазона

[^a-f]

\d

Десятичная цифра (аналог [0-9])

\D

\w

Словообразующий символ (зависит от текущей языковой культуры; например, для английского языка это [a-zA-Z_0-9])

\W

\s

Пробельный символ (пробел, табуляция, новая строка, перевод каретки)

\S

\p{…}

Любой символ из указанной Unicode-категории. Например, \p{P}  символы пунктуации

\P

.

Любой символ, кроме \n

\n

В регулярном выражении можно использовать особые символы для начала строки ^, конца строки $, границы слова \b, символа табуляции \t и перевода строки \n.

Отдельные атомарные регулярные выражения допустимо обрамлять в группы, при помощи символов (). Если необходимо, группы или выражения можно объединять, используя символ |.

К каждому символу или группе можно присоединить квантификаторы повторения:

? повтор 0 или 1 раз;

+ повтор от 1 до бесконечности;

* повтор от 0 до бесконечности;

{n} повтор n раз ровно;

{n,m} повтор от n до m раз;

{n,} повтор от n раз до бесконечности;

Рассмотрим некоторые простые примеры регулярных выражений:

^\s*$ пустая строка

\bsomething\b отдельное слово something

\b[bcf]at\b слова bat, cat, fat

В .NET имеется пространство имён System.Text.RegularExpressions, содержащее набор типов для работы с регулярными выражениями. Основной класс для работы с регулярными выражениями – это класс Regex. Объект класса представляет одно регулярное выражение, которое указывается при вызове конструктора. Существует перегруженная версия конструктора, позволяющая указать различные опции для создаваемого регулярного выражения.

Regex re = new Regex(@"\b[bcf]at\b");

Regex re2 = new Regex(@"\b[bcf]at\b", RegexOptions.IgnoreCase);

Для поиска информации согласно текущему регулярному выражению можно использовать метод IsMatch(). Более продуктивным является применение функции Match(), которая возвращает объект класса Match.

Regex re = new Regex(@"\b[bcf]at\b", RegexOptions.Compiled);

Match m = re.Match("bad fat cat");

while(m.Success)

{

Console.WriteLine(m.Index);



Console.WriteLine(m.Value);

m = m.NextMatch();

}

Для замены на основе регулярных выражений используется метод Regex.Replace(). Параметры метода – обрабатываемая строка и строка на замену.



Каталог: images
images -> В списке студентов (или магистрантов)
images -> Н. И. Сулейманов Комплект контрольно-оценочных средств для оценки результатов освоения профессионального модуля разработан на основе Федерального государственного образовательного стандарта среднего профессионального
images -> По направлению подготовки
images -> Добавить гаджеты. Добавление гаджетов
images -> Техническое задание № apnip/C. 2/CS/Ind/01 Международный консультант по улучшенной производительности орошаемого земледелия
images -> Комплект контрольно-оценочных средств по профессиональному модулю пм. 01 Техническое обслуживание и ремонт автотранспорта


Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   ...   29




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница