05 - Java. Collections Framework и GenericsRoman Brovko
Обзор стандартных коллекций и их реализации:
* Списки, стеки, очереди.
* Множества.
* Ассоциативные массивы.
Generics:
* Параметризация классов и методов
* Синтаксис и реализация в Java
Shirley Williams has over 20 years of experience in food science and quality control roles. She currently works as a Learning Mentor and Teacher at King Alfred's Academy, and has previously held roles as a Laboratory Technician, Food Technologist, and Quality Control Technician at various food and beverage companies. She has a BSc in Science and experience in areas such as product development, technical support, chemical and microbiological analysis, and maintaining quality systems.
The document discusses planning for a beach production video. A risk assessment was conducted to identify and minimize risks like going into deep water or leaving equipment unattended. Key controls include not going past knee-deep in the sea, being careful with equipment near water, and having someone watch equipment at all times. Props like a speaker, sunglasses, balloons, inflatables, fruit, and colored cigarettes were selected to help set a summery beach theme and maintain consistent colors in the video.
05 - Java. Collections Framework и GenericsRoman Brovko
Обзор стандартных коллекций и их реализации:
* Списки, стеки, очереди.
* Множества.
* Ассоциативные массивы.
Generics:
* Параметризация классов и методов
* Синтаксис и реализация в Java
Shirley Williams has over 20 years of experience in food science and quality control roles. She currently works as a Learning Mentor and Teacher at King Alfred's Academy, and has previously held roles as a Laboratory Technician, Food Technologist, and Quality Control Technician at various food and beverage companies. She has a BSc in Science and experience in areas such as product development, technical support, chemical and microbiological analysis, and maintaining quality systems.
The document discusses planning for a beach production video. A risk assessment was conducted to identify and minimize risks like going into deep water or leaving equipment unattended. Key controls include not going past knee-deep in the sea, being careful with equipment near water, and having someone watch equipment at all times. Props like a speaker, sunglasses, balloons, inflatables, fruit, and colored cigarettes were selected to help set a summery beach theme and maintain consistent colors in the video.
La investigación se centra en elaborar un champú a base de semillas de guaireña (Moringa oleífera) para nutrir el cabello en San Francisco, Venezuela. Primero se estudian los beneficios de la guaireña y luego bajo distintos procedimientos se crea y prueba un champú natural. La investigación es explicativa y correlacional con diseño experimental. Los datos se recolectan mediante entrevistas y el champú natural resulta 90% exitoso. Finalmente, se concluye que la población debe usar productos naturales para el cabello y que
The document summarizes the analysis of two music videos that were reviewed to help inform the production of the student's own music video. The Pharrell Williams "Happy" video was chosen because it is also in the dance genre. Key elements noted were bright colors, dancing, and smiling people. The Clean Bandit and Jess Glynne "Real Love" video featured a female artist, and the student wants to portray their artist similarly, showing her enjoying the music and looking nicely dressed with bold hair. These elements may be incorporated into their own music video to suit the genre and artist portrayal.
This document lists the names of 9 photographers who have contributed photos to Haiku Deck presentations on SlideShare. It concludes by encouraging the reader to get started creating their own Haiku Deck presentation.
El documento describe diferentes tipos de energías limpias, incluyendo la energía eólica, solar, undimotriz, mareomotriz, geotérmica e hidroeléctrica. Explica brevemente cómo cada una de estas energías limpias genera electricidad u otro tipo de energía de manera sostenible sin producir residuos, como la energía eólica que usa aerogeneradores, la energía solar que usa paneles solares, y la energía hidroeléctrica que usa la fuerza del agua.
Dokumen ini membahas tentang tumbuhan dan hewan langka di Indonesia. Beberapa tumbuhan langka yang disebutkan antara lain kayu cendana, padma raksasa, sarang semut, kantong semar, dan bunga bangkai. Hewan-hewan langka yang disebutkan di antaranya orang utan, badak bercula satu, badak bercula dua, musang congkok, singapuar, ikan belida, harimau Sumatera, anoa, burung elang Jawa, dan babirusa. Dokumen ini bertujuan unt
Este documento clasifica y describe brevemente cuatro tipos de energías limpias: la energía eólica, obtenida del viento; la energía hidroeléctrica, generada por el movimiento del agua; la energía solar, proveniente de la radiación del sol; y la energía geotérmica, producida por el calor interno de la Tierra.
Autumn is one of the best times to visit Niigata. The leaves are so unbelievably colourful and complement the scenery so well. We visited Shibata, Tsukioka Onsen (sake tasting), the Niigata Central market, Murasugi (outdoor onsen), Lake Hyoko (Swan Lake) and Agano, before heading to Niigata city.
By Janet de Acevedo Macdonald
"If you love to show, then wherever Arabian horse lovers gather is a prime travel destination." My observations about Tulsa, Oklahoma, the site of the US National Championship Show for the Arabian Horse Association.
EE'13 - The Modern Marketer Can be Agile Toobentgate
The document discusses how ReadyTalk, a company that provides audio and web conferencing services, adapted an Agile methodology for their marketing department. It describes some of the problems they were facing like working in silos and lack of visibility into the big picture that led them to try Agile. With Agile, ReadyTalk does yearly and quarterly planning and then breaks projects into two week sprints with daily standups to track progress and address any blocks. This allows the marketing team to work in a more collaborative way and be responsive to changing priorities. The document encourages readers to evaluate their own marketing department and whether an Agile approach could help solve problems they face on a daily, weekly or quarterly basis.
The document outlines the process a startup goes through when working with a sponsor on the GREX platform. The sponsor verifies the startup's information and documents and proposes the company to GREX. If approved, the startup goes live, provides information and announcements, builds an investor fan base, and prepares for a primary capital raise, which must be approved by GREX.
The document discusses creating a public image for a new artist through makeup tutorials and lyric analysis. Two makeup tutorials were found that portray the fun, party side of the artist and her innocent side. A lyric analysis revealed the song is about not wanting to be taken advantage of by a boy and wanting to get to know him first, showing she is classy but just wants to have fun. This informs how the artist should be portrayed as classy, young and fun through her hair, makeup and costumes.
The 4th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Занятие №3 в рамках Курсов программирования Ruby on Rails.
Группа курсов «ВКонтакте»: http://vk.com/ruby_school
Организатор — Агентство интернет-маркетинга Мэйк makeagency.ru. Курсы проводятся на базе Кузбасского государственного технического университета, кафедры «Информационные и автоматизированные производственные системы».
OOP in JavaScript - Presentation by Eugene KaloshaRostyslav Siryk
Евгений Калоша рассказывает о том, как выглядит объектно-ориентированное программирование в JavaScript. Его видение сформировано также под влиянием многолетнего опыта разработки на Flex, PHP и Java.
Запись доклада:
http://flash-ripper.com/oop-in-javascript
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"PyNSK
Докладчик:
Александр Маршалов (ЦФТ)
Описание: Мы узнаем, что из себя представляет дерево синтаксического разбора (AST / Abstract Syntax Tree) в языке Python
и какие магические возможности можно получить с помощью модификации AST.
1. Темы лекции: Строки, массивы, коллекции.
Практическое задание: Строки, массивы, коллекции.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 5
2. http://www.slideshare.net/IgorShkulipa 2
Массивы
Массивы в C# в значительной мере происходят от массивов С++. Для
обращения к массивам применяется указатель, который указывает на
начало непрерывного диапазона элементов, находящегося в
некотором блоке памяти.
При объявлении типа данных (класса или структуры), CLR генерирует тип
массива, основанный на этом новом типе данных. Сгенерированный
тип массива – это ссылочный тип, то есть экземпляры типа массива –
это объекты классов.
Этот сгенерированный тип наследуется от System.Array, который,
естественно, наследуется от System.Object. Это обозначает, что
каждый массив, независимо от типа элементов реализует все методы
System.Array.
Способ объявления массивов в С# похож на С++, но квадратные скобки
следуют за типом, а не за именем переменной.
int[] array1= new int[10];
int[] array2= new int[] {1, 2, 3, 4, 5};
int[] array3= {10, 9, 8, 7, 6};
3. http://www.slideshare.net/IgorShkulipa 3
Неявно типизированные массивы
var implicitArray1= new [] {1, 2, 3, 4, 5};
В таком случае компилятор попытается неявно определить тип элементов
массива и задать тип массиву.
var implicitArray2= new [] {1, 2.34, 3, 4, 5.1};
В этом случае компилятор определит тип элементов массива, как тип, к
которому приводимы все элементы, указанные в инициализаторе.
var implicitArray3= new [] {1, 2.34, ‘a’, “some string”};
В этом случае компилятор попытается определить тип массива, как и в
предыдущем примере, не сможет этого сделать и выдаст исключение
Не найдено подходящего типа для неявно типизированного массива
Такое же исключение возникнет в случае, если попытаться объявить
массив с типами, которые приводимы друг к другу (например, если
объявлены два класса с неявными преобразованиям один к другому)
4. http://www.slideshare.net/IgorShkulipa 4
Sytem.Array свойства
Имя Описание
IsFixedSize
Получает значение, показывающее, имеет ли список Array
фиксированный размер.
IsReadOnly
Получает значение, указывающее, доступен ли объект
Array только для чтения.
IsSynchronized
Получает значение, показывающее, является ли доступ к
коллекции Array синхронизированным
(потокобезопасным).
Length
Получает 32-разрядное целое число, представляющее
общее число элементов во всех измерениях массива Array.
LongLength
Получает 64-разрядное целое число, представляющее
общее число элементов во всех измерениях массива Array.
Rank Получает ранг (размерность) объекта Array.
SyncRoot
Получает объект, который может использоваться для
синхронизации доступа к объекту Array.
6. http://www.slideshare.net/IgorShkulipa 6
Многомерные массивы
Прямоугольные массивы:
int[,] squareArray1= new int[10,10];
int[,] squareArray2= {{1,2,3},
{4,5,6},
{7,8,9}};
int[, ,] squareArray3 = new int[2, 3, 4];
Многомерные зубчатые массивы:
int[][] jaggedArray= new int[3][];
jaggedArray[0]= new int[] {1, 2};
jaggedArray[1]= new int[] {3, 4, 5, 6};
jaggedArray[2]= new int[] {7, 8, 9};
7. http://www.slideshare.net/IgorShkulipa 7
Коллекции
Пространство имен System.Collections предоставляет типы для обработки
так называемых коллекций – специализированных наборов данных,
поддерживающих упорядочивание и специфичные методы обработки.
Все коллекции реализуют интерфейс ICollection или ICollection<T>.
public interface ICollection<T> : IEnumerable<T>,
IEnumerable
{
void Add(T item);
bool Remove(T item);
void Clear();
bool Contains(T item);
void CopyTo(T[] array, int arrayIndex);
int Count { get; }
bool IsReadOnly { get; }
}
Для использования обобщенных коллекций необходимо подключить
пространство имен System.Collections.Generic.
8. http://www.slideshare.net/IgorShkulipa 8
System.Collections
Класс Описание
ArrayList
Реализует интерфейс IList с помощью массива с динамическим
увеличением размера до нужного значения.
BitArray
Управляет компактным битовым массивом значений, представленных
логическими значениями, где значение true соответствует 1, а значение
false соответствует 0.
CaseInsensitiveComparer Проверяет равенство двух объектов без учета регистра строк.
CaseInsensitiveHashCod
eProvider
Устаревшее. Предоставляет хэш-код объекта, используя алгоритм
хэширования, при котором не учитывается регистр строк.
CollectionBase
Предоставляет базовый класс abstract для строго типизированной
коллекции.
Comparer Проверяет равенство двух объектов с учетом регистра строк.
DictionaryBase
Предоставляет базовый класс abstract для строго типизированной
коллекции ключ/значение.
Hashtable
Предоставляет коллекцию пар "ключ-значение", которые упорядочены
по хэш-коду ключа.
Queue
Предоставляет коллекцию объектов, которая обслуживается по
принципу "первым поступил — первым обслужен".
ReadOnlyCollectionBase
Предоставляет базовый класс abstract для неуниверсальной коллекции
со строгим типом, которая доступна только для чтения.
SortedList
Предоставляет коллекцию пар "ключ-значение", упорядоченных по
ключам. Доступ к парам можно получить по ключу и по индексу.
Stack
Представляет простую неуниверсальную коллекцию объектов,
действующую по принципу LIFO.
9. http://www.slideshare.net/IgorShkulipa 9
Использование коллекций
using System;
using System.Collections;
public class SamplesArrayList
{
public static void Main()
{
ArrayList myAL = new ArrayList();
myAL.Add("Hello");
myAL.Add("World");
myAL.Add("!");
Console.WriteLine("myAL");
Console.WriteLine(" Count: {0}", myAL.Count);
Console.WriteLine(" Capacity: {0}", myAL.Capacity);
Console.Write(" Values:");
PrintValues(myAL);
Console.ReadKey();
}
public static void PrintValues(IEnumerable myList)
{
foreach (Object obj in myList)
Console.Write(" {0}", obj);
Console.WriteLine();
}
}
10. http://www.slideshare.net/IgorShkulipa 10
Типы обобщенных коллекций
Следующие универсальные типы соответствуют существующим типам коллекций:
• List<T> — это универсальный класс, соответствующий ArrayList.
• Dictionary<TKey, TValue> — это универсальный класс, соответствующий
Hashtable.
• Collection<T> — это универсальный класс, соответствующий CollectionBase.
Класс Collection<T> можно использовать как базовый, но в отличие от
CollectionBase он не является абстрактным. Это значительно упрощает его
использование.
• ReadOnlyCollection<T> — это универсальный класс, соответствующий
ReadOnlyCollectionBase. Класс ReadOnlyCollection<T> не является абстрактным и
имеет конструктор, что облегчает предоставление существующей коллекции
List<T> в виде коллекции только для чтения.
• Универсальные классы Queue<T>, Stack<T> и SortedList<TKey, TValue>
соответствуют нестандартным классам с соответствующими именами.
Дополнительные типы
Существует несколько универсальных типов коллекций, у которых нет нестандартных
аналогов:
• LinkedList<T> — это связанный список общего назначения, обеспечивающий
операции вставки и удаления с временной характеристикой О(1).
• SortedDictionary<TKey, TValue> — это сортируемый словарь с операциями
вставки и извлечения с временной характеристикой O(log n), что делает его
альтернативой SortedList<TKey, TValue>.
• KeyedCollection<TKey, TItem> — это гибрид списка и словаря, который
предоставляет способ хранения объектов, содержащих свои собственные ключи.
11. http://www.slideshare.net/IgorShkulipa 11
Использование обобщенных коллекций
using System;
using System.Collections;
using System.Collections.Generic;
public class SamplesArrayList {
public static void Main() {
List<List<string>> stringList = new List<List<string>>();
for (int i = 0; i < 10; i++)
{
List<string> item = new List<string>();
for (int j = 0; j <= i; j++)
{
item.Add("string #" + i.ToString() + j.ToString());
}
stringList.Add(item);
}
foreach (var stl in stringList) {
foreach (var st in stl) {
Console.WriteLine(st);
}
}
Console.ReadKey();
}
}
string #00
string #10
string #11
string #20
string #21
string #22
string #30
string #31
string #32
string #33
string #40
string #41
string #42
string #43
string #44
...
12. http://www.slideshare.net/IgorShkulipa 12
Паттерн Iterator
Назначение паттерна Iterator
• Предоставляет способ последовательного доступа ко всем
элементам составного объекта, не раскрывая его внутреннего
представления.
• Абстракция в стандартных библиотеках C++ и Java, позволяющая
разделить классы коллекций и алгоритмов.
• Придает обходу коллекции "объектно-ориентированный статус".
• Полиморфный обход.
14. http://www.slideshare.net/IgorShkulipa 14
Реализация коллекции
public class IterCollection: IIterCollection
{
private ArrayList items = new ArrayList();
IIterator IIterCollection.GetIterator()
{
return new Iterator(this);
}
public object Get(int i)
{
return items[i];
}
public int GetCount()
{
return items.Count;
}
}
19. http://www.slideshare.net/IgorShkulipa 19
Класс String
Представляет текст как последовательность знаков Юникода.
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class String : IComparable, ICloneable, IConvertible,
IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
Имя Описание
String(Char*)
Инициализирует новый экземпляр класса String значением, на которое
указывает заданный указатель на массив знаков Юникода.
String(Char[])
Инициализирует новый экземпляр класса String значением, заданным в виде
массива знаков Юникода.
String(SByte*)
Инициализирует новый экземпляр класса String значением, определенным
указателем на массив 8-разрядных целых чисел со знаком.
String(Char, Int32)
Инициализирует новый экземпляр класса String значением, полученным
путем повторения заданного знака Юникода заданное число раз.
String(Char*, Int32, Int32)
Инициализирует новый экземпляр класса String значением, которое
определяется заданным указателем на массив знаков Юникода, начальной
позицией знака в этом массиве и длиной.
String(Char[], Int32, Int32)
Инициализирует новый экземпляр класса String значением, заданным
массивом знаков Юникода, начальной позицией знака в пределах данного
массива и длиной.
String(SByte*, Int32, Int32)
Инициализирует новый экземпляр класса String значением, определяемым
заданным указателем на массив 8-битовых целых чисел со знаком,
позицией начального знака в пределах данного массива и длиной.
String(SByte*, Int32, Int32,
Encoding)
Инициализирует новый экземпляр класса String значением, определенным
заданным указателем на массив 8-разрядных целых чисел со знаком,
начальной позицией знака в пределах данного массива, длиной и объектом
Encoding.
20. http://www.slideshare.net/IgorShkulipa 20
Методы
• Contains () — позволяет узнать, содержит ли строка подстроку, переданную
в качестве параметра.
• Format () — это статичный метод, который позволяет форматировать строки, как
в консольных приложениях.
• IndexOf () — возвращает индекс символа, начиная с которого в строке найдена
подстрока.
• Insert () — позволяет вставить подстроку, переданную во втором параметре, в
строку, начиная с символа, указанного в первом параметре. При этом
переменная str не изменяется, а новая строка просто возвращается в виде
результата.
• Remove () — удаляет из строки символы, начиная с индекса, указанного в
качестве первого параметра, и ровно столько символов, сколько указано во
втором параметре. Сама строка не изменяется, измененный вариант
возвращается в качестве результата.
• Replace () — ищет в строке подстроку, указанную в качестве первого
параметра, и заменяет ее на подстроку из второго параметра, возвращая
результат замены.
• ToUpper () и ToLower () — возвращают строку, в которой все символы
приведены к верхнему ( ToUpper ()) или к нижнему (ToLower ()) регистру.
• Substring () — возвращает часть строки, начиная с символа, указанного в
качестве первого параметра, и ровно столько символов, сколько указано во
втором параметре.
• ToCharArray () — превращает строку в массив символов. Метод очень удобен,
когда нужно проанализировать строку посимвольно.
21. http://www.slideshare.net/IgorShkulipa 21
Управляющие символы
• ' — одинарная кавычка, используется для
объявления литералов типа System.Char
• " — двойная кавычка, используется для объявления
строковых литералов
• — обратный слеш
• 0 — null-символ в Юникоде
• a — символ Alert (№7)
• b — символ Backspace (№8)
• f —смена страницы FORM FEED (№12)
• n — перевод строки (№10)
• r — возврат каретки (№13)
• t — горизонтальная табуляция (№9)
• v — вертикальная табуляция (№11)
• Uxxxx — символ Юникода с шестнадцатеричным
кодом xxxx
• xn[n][n][n] — символ Юникода с
шестнадцатеричным кодом nnnn, версия предыдущего
пункта с переменной длиной цифр кода
22. http://www.slideshare.net/IgorShkulipa 22
Форматы строк
Интерфейс IFormatProvider предоставляет механизм извлечения объекта
для управления форматированием.
.NET включает следующие три предопределенные реализации
IFormatProvider :
• Класс NumberFormatInfo, который предоставляет сведения,
используемые для форматирования чисел, таких как валюта,
разделитель разрядов, и десятичный разделитель для
определенного языка и региональных параметров.
• Класс DateTimeFormatInfo, предоставляющий сведения,
используемые для форматирования дат и времени, таких как
символы разделителя даты и времени для определенного языка и
региональных параметров или порядок и форма компонентов год,
месяц и день.
• Класс CultureInfo, представляющий определенный язык и
региональные параметры. Метод GetFormat возвращает
региональный объект NumberFormatInfo или DateTimeFormatInfo,
в зависимости от того, используется ли объект CultureInfo в
форматирование или анализе операции, которая включает числа
или дату и время.
23. http://www.slideshare.net/IgorShkulipa 23
Пример
using System.Globalization;
class Program
{
static void Main(string[] args)
{
DateTime date = new DateTime(2013, 5, 30, 19, 00, 0);
CultureInfo[] cultures = { new CultureInfo("en-US"),
new CultureInfo("fr-FR"),
new CultureInfo("it-IT"),
new CultureInfo("de-DE"),
new CultureInfo("ru-RU")};
foreach (CultureInfo culture in cultures)
Console.WriteLine("{0}: {1}",
culture.Name, date.ToString(culture));
Console.ReadKey();
}
}
en-US: 5/30/2013 7:00:00 PM
fr-FR: 30/05/2013 19:00:00
it-IT: 30/05/2013 19:00:00
de-DE: 30.05.2013 19:00:00
ru-RU: 30.05.2013 19:00:00
24. http://www.slideshare.net/IgorShkulipa 24
Паттерн Builder
Паттерн Builder может помочь в решении следующих задач:
◦ В системе могут существовать сложные объекты, создание
которых за одну операцию затруднительно или невозможно.
Требуется поэтапное построение объектов с контролем
результатов выполнения каждого этапа.
◦ Данные должны иметь несколько представлений. Например,
если есть некоторый исходный документ в формате RTF (Rich
Text Format), в общем случае содержащий текст,
графические изображения и служебную информацию о
форматировании (размер и тип шрифтов, отступы и др.).
Если этот документ в формате RTF преобразовать в другие
форматы (например, Microsoft Word или простой ASCII-
текст), то полученные документы и будут представлениями
исходных данных.
25. http://www.slideshare.net/IgorShkulipa 25
Описание паттерна Builder
Паттерн Builder отделяет алгоритм поэтапного конструирования
сложного объекта от его внешнего представления так, что с
помощью одного и того же алгоритма можно получать разные
представления этого объекта.
Для этого паттерн Builder определяет алгоритм поэтапного
создания продукта в специальном классе Director
(распорядитель), а ответственность за координацию процесса
сборки отдельных частей продукта возлагает на иерархию
классов Builder. В этой иерархии базовый класс Builder
объявляет интерфейс для построения отдельных частей
продукта, а соответствующие подклассы конкретных
строителей их реализуют подходящим образом, например,
создают или получают нужные ресурсы, сохраняют
промежуточные результаты, контролируют результаты
выполнения операций.
26. http://www.slideshare.net/IgorShkulipa 26
Реализация паттерна Builder. Класс Computer
class Computer
{
public string Name { get; set; }
public string CPU { get; set; }
public string RAM { get; set; }
public string HDD { get; set; }
public string VGA { get; set; }
public void Print()
{
Console.Write(
"{0}: {1}/{2}/{3}/{4}n",
Name, CPU, RAM, HDD, VGA);
}
}
29. http://www.slideshare.net/IgorShkulipa 29
Использование строителей
class Program
{
static void Main(string[] args)
{
Director director = new Director();
//Building Game Computer
director.SetBuilder(new GameCompBuilder());
Computer comp = director.GetComp();
comp.Print();
//Building Office Computer
director.SetBuilder(new OfficeCompBuilder());
comp = director.GetComp();
comp.Print();
Console.ReadKey();
}
}
Game Computer: Core i7 3.0 GHz/8 Gb/1 Tb/GeForce GTX 560
Office Computer: Core i3 3.0 GHz/2 Gb/500 Gb/Intel GMA 4000
30. http://www.slideshare.net/IgorShkulipa 30
StringBuilder
Предоставляет изменяемую строку символов.
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StringBuilder : ISerializable
Операция объединения объекта String всегда создает новый объект из
существующей строки и новых данных. Объект StringBuilder
поддерживает буфер для размещения и конкатенации новых данных.
Новые данные добавляются в имеющийся буфер только в том случае,
если в нем имеется достаточное свободное пространство для их
размещения, в противном случае выделяется новый буфер
достаточного размера, данные из оригинального буфера копируются в
другой буфер, и новые данные добавляются уже в новый буфер.
32. http://www.slideshare.net/IgorShkulipa 32
Регулярные выражения
Пространство имен System.Text.RegularExpressions предоставляет классы
для работы с регулярными выражениями.
Регулярные выражения - формальный язык поиска и осуществления
манипуляций с подстроками в тексте, основанный на использовании
метасимволов. По сути это строка-образец, состоящая из символов и
метасимволов и задающая правило поиска.
Пример:
string emailExpression =
"[.-_a-z0-9]+@([a-z0-9][-a-z0-9]+.)+[a-z]{2,6}";
Ссылка на справочник по языку регулярных выражений .NET
http://msdn.microsoft.com/ru-ru/library/az24scfc.aspx
33. http://www.slideshare.net/IgorShkulipa 33
Классы Regex и Match
Regex предлагает следующие функциональные возможности подбора
шаблонов:
• Проверка совпадения. Вызов метода IsMatch позволяет
определить, присутствует ли соответствие.
• Извлечения одного совпадения. Вызов метода Match позволяет
извлечь объект Match, который представляет первое совпадение,
найденное в строке или в части строки. Последующие совпадения
можно извлечь, вызвав метод Match.NextMatch.
• Извлечение всех совпадений. Вызов метода Matches позволяет
извлечь объект System.Text.RegularExpressions.MatchCollection,
который представляет все совпадения, найденные в строке или в
части строки.
• Замена совпадающего текста. Вызов метода Replace позволяет
заменить совпадающий текст. Регулярным выражением также
может быть определен текст замещения. Кроме того, некоторые
методы Replace включают параметр MatchEvaluator, который
позволяет программно определить текст замены.
• Создание массива строк, сформированный на основе части
входной строки. Вызов метода Split позволяет разбить входную
строку в позициях, определенных регулярным выражением.
34. http://www.slideshare.net/IgorShkulipa 34
Пример
class Program
{
static void Main(string[] args)
{
string strText =
"Lorem ipsum dolor sit amet, vasya.pupkin@gmail.com consectetur adipiscing elit. "+
"In posuere, elit ut tristique condimentum, lectus est sodales nibh, "+
"sed adipiscing velit address@mail.ru lectus vel felis. Praesent id urna "+
"ut quam dapibus sollicitudin sit amet et mi. Quisque in magna nisi, in "+
"scelerisque mi admin@mysite.com.ua! Vestibulum suscipit lacinia tempor. Donec "+
"euismod massa sit amet tellus consectetur dapibus. Donec nisl justo, egestas at "+
"mattis ut, sagittis eu ipsum. Aliquam porttitor massa support@somedomain.info in.";
string strFind = "([A-Z;a-z;0-9;x2E;x2D;_]+)?@([A-Z;a-z;0-9;x2E;-;]+)?";
string strReplace = "$1";
Console.WriteLine(strText);
Console.WriteLine();
Regex regex = new Regex(strFind);
MatchCollection matches = regex.Matches(strText);
foreach(var match in matches)
{
Console.WriteLine(match);
}
Console.WriteLine();
strText = regex.Replace(strText, strReplace, 10);
Console.WriteLine(strText);
Console.ReadKey();
}
}
35. http://www.slideshare.net/IgorShkulipa 35
Результат
Lorem ipsum dolor sit amet, vasya.pupkin@gmail.com consectetur adipiscing elit.
In posuere, elit ut tristique condimentum, lectus est sodales nibh, sed adipisci
ng velit address@mail.ru lectus vel felis. Praesent id urna ut quam dapibus soll
icitudin sit amet et mi. Quisque in magna nisi, in scelerisque mi admin@mysite.c
om.ua! Vestibulum suscipit lacinia tempor. Donec euismod massa sit amet tellus c
onsectetur dapibus. Donec nisl justo, egestas at mattis ut, sagittis eu ipsum. A
liquam porttitor massa support@somedomain.info in.
vasya.pupkin@gmail.com
address@mail.ru
admin@mysite.com.ua
support@somedomain.info
Lorem ipsum dolor sit amet, vasya.pupkin consectetur adipiscing elit. In posuere
, elit ut tristique condimentum, lectus est sodales nibh, sed adipiscing velit a
ddress lectus vel felis. Praesent id urna ut quam dapibus sollicitudin sit amet
et mi. Quisque in magna nisi, in scelerisque mi admin! Vestibulum suscipit lacin
ia tempor. Donec euismod massa sit amet tellus consectetur dapibus. Donec nisl j
usto, egestas at mattis ut, sagittis eu ipsum. Aliquam porttitor massa support i
n.
36. http://www.slideshare.net/IgorShkulipa 36
Лабораторная работа № 5. Строки и коллекции
• Создать словарь «ошибочных слов», например привет-првиет-
пирвет...
• На основе этого словаря, исправить ошибки в текстовых файлах в
указанной директории.
• В этих же файлах, с помощью регулярных выражений, найти и
заменить все номера мобильных телефонов
с (012) 345-67-89 на +380 12 345 67 89.