SlideShare a Scribd company logo
Темы лекции: Строки, массивы, коллекции.
Практическое задание: Строки, массивы, коллекции.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 5
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};
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”};
В этом случае компилятор попытается определить тип массива, как и в
предыдущем примере, не сможет этого сделать и выдаст исключение
Не найдено подходящего типа для неявно типизированного массива
Такое же исключение возникнет в случае, если попытаться объявить
массив с типами, которые приводимы друг к другу (например, если
объявлены два класса с неявными преобразованиям один к другому)
http://www.slideshare.net/IgorShkulipa 4
Sytem.Array свойства
Имя Описание
IsFixedSize
Получает значение, показывающее, имеет ли список Array
фиксированный размер.
IsReadOnly
Получает значение, указывающее, доступен ли объект
Array только для чтения.
IsSynchronized
Получает значение, показывающее, является ли доступ к
коллекции Array синхронизированным
(потокобезопасным).
Length
Получает 32-разрядное целое число, представляющее
общее число элементов во всех измерениях массива Array.
LongLength
Получает 64-разрядное целое число, представляющее
общее число элементов во всех измерениях массива Array.
Rank Получает ранг (размерность) объекта Array.
SyncRoot
Получает объект, который может использоваться для
синхронизации доступа к объекту Array.
http://www.slideshare.net/IgorShkulipa 5
System.Array методы
Обнуление:
Clear();
Поиск:
LastIndexOf(), IndexOf(), Find(),
FindAll(), FindIndex(), FindLastIndex(),
FindLast(),
Сортировка:
Sort()
Неглубокое копирование:
Clone()
Глубокое копирование:
Copy(), CopyTo()
Длина:
GetLength()
Значение:
GetValue()
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};
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.
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.
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();
}
}
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> — это гибрид списка и словаря, который
предоставляет способ хранения объектов, содержащих свои собственные ключи.
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
...
http://www.slideshare.net/IgorShkulipa 12
Паттерн Iterator
Назначение паттерна Iterator
• Предоставляет способ последовательного доступа ко всем
элементам составного объекта, не раскрывая его внутреннего
представления.
• Абстракция в стандартных библиотеках C++ и Java, позволяющая
разделить классы коллекций и алгоритмов.
• Придает обходу коллекции "объектно-ориентированный статус".
• Полиморфный обход.
http://www.slideshare.net/IgorShkulipa 13
Интерфейсы
public interface IIterator
{
object Next();
object First();
bool Finished();
object Current();
}
public interface IIterCollection
{
IIterator GetIterator();
}
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;
}
}
http://www.slideshare.net/IgorShkulipa 15
Реализация итератора
public class Iterator : IIterator
{
private IterCollection collection;
private int current;
public Iterator(IterCollection col)
{
collection = col;
current = 0;
}
object IIterator.First()
{
return collection.Get(0);
}
object IIterator.Current()
{
return collection.Get(current);
}
bool IIterator.Finished()
{
return (current >= collection.GetCount());
}
object IIterator.Next()
{
return collection.Get(current++);
}
}
http://www.slideshare.net/IgorShkulipa 16
Использование
class Program
{
static void Main(string[] args)
{
IIterCollection ic = new IterCollection(10);
IIterator iter = ic.GetIterator();
while (!iter.Finished())
{
Console.WriteLine(iter.Next());
}
Console.ReadKey();
}
}
0
7
5
2
9
9
5
0
5
9
http://www.slideshare.net/IgorShkulipa 17
Альтернативная реализация
public class SquareCollection : IEnumerable<int> {
private int[][] items;
public SquareCollection(int number) {
Random rand = new Random();
this.items = new int[number][];
for (int i = 0; i < number; i++) {
int[] item = new int[number];
for (int j = 0; j < number; j++) {
item[j] = rand.Next() % 10;
}
this.items[i] = item;
}
}
public IEnumerator<int> GetEnumerator() {
for (int i = 0; i < items.Length; i++) {
for (int j = items[i].Length - 1; j >= 0; j--) {
yield return items[i][j];
}
}
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
}
http://www.slideshare.net/IgorShkulipa 18
Использование
class Program
{
static void Main(string[] args)
{
SquareCollection sc = new SquareCollection(10);
foreach (var item in sc)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
5
0
1
5
2
6
7
1
3
9
5
0
3
8
2
...
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.
http://www.slideshare.net/IgorShkulipa 20
Методы
• Contains () — позволяет узнать, содержит ли строка подстроку, переданную
в качестве параметра.
• Format () — это статичный метод, который позволяет форматировать строки, как
в консольных приложениях.
• IndexOf () — возвращает индекс символа, начиная с которого в строке найдена
подстрока.
• Insert () — позволяет вставить подстроку, переданную во втором параметре, в
строку, начиная с символа, указанного в первом параметре. При этом
переменная str не изменяется, а новая строка просто возвращается в виде
результата.
• Remove () — удаляет из строки символы, начиная с индекса, указанного в
качестве первого параметра, и ровно столько символов, сколько указано во
втором параметре. Сама строка не изменяется, измененный вариант
возвращается в качестве результата.
• Replace () — ищет в строке подстроку, указанную в качестве первого
параметра, и заменяет ее на подстроку из второго параметра, возвращая
результат замены.
• ToUpper () и ToLower () — возвращают строку, в которой все символы
приведены к верхнему ( ToUpper ()) или к нижнему (ToLower ()) регистру.
• Substring () — возвращает часть строки, начиная с символа, указанного в
качестве первого параметра, и ровно столько символов, сколько указано во
втором параметре.
• ToCharArray () — превращает строку в массив символов. Метод очень удобен,
когда нужно проанализировать строку посимвольно.
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, версия предыдущего
пункта с переменной длиной цифр кода
http://www.slideshare.net/IgorShkulipa 22
Форматы строк
Интерфейс IFormatProvider предоставляет механизм извлечения объекта
для управления форматированием.
.NET включает следующие три предопределенные реализации
IFormatProvider :
• Класс NumberFormatInfo, который предоставляет сведения,
используемые для форматирования чисел, таких как валюта,
разделитель разрядов, и десятичный разделитель для
определенного языка и региональных параметров.
• Класс DateTimeFormatInfo, предоставляющий сведения,
используемые для форматирования дат и времени, таких как
символы разделителя даты и времени для определенного языка и
региональных параметров или порядок и форма компонентов год,
месяц и день.
• Класс CultureInfo, представляющий определенный язык и
региональные параметры. Метод GetFormat возвращает
региональный объект NumberFormatInfo или DateTimeFormatInfo,
в зависимости от того, используется ли объект CultureInfo в
форматирование или анализе операции, которая включает числа
или дату и время.
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
http://www.slideshare.net/IgorShkulipa 24
Паттерн Builder
Паттерн Builder может помочь в решении следующих задач:
◦ В системе могут существовать сложные объекты, создание
которых за одну операцию затруднительно или невозможно.
Требуется поэтапное построение объектов с контролем
результатов выполнения каждого этапа.
◦ Данные должны иметь несколько представлений. Например,
если есть некоторый исходный документ в формате RTF (Rich
Text Format), в общем случае содержащий текст,
графические изображения и служебную информацию о
форматировании (размер и тип шрифтов, отступы и др.).
Если этот документ в формате RTF преобразовать в другие
форматы (например, Microsoft Word или простой ASCII-
текст), то полученные документы и будут представлениями
исходных данных.
http://www.slideshare.net/IgorShkulipa 25
Описание паттерна Builder
Паттерн Builder отделяет алгоритм поэтапного конструирования
сложного объекта от его внешнего представления так, что с
помощью одного и того же алгоритма можно получать разные
представления этого объекта.
Для этого паттерн Builder определяет алгоритм поэтапного
создания продукта в специальном классе Director
(распорядитель), а ответственность за координацию процесса
сборки отдельных частей продукта возлагает на иерархию
классов Builder. В этой иерархии базовый класс Builder
объявляет интерфейс для построения отдельных частей
продукта, а соответствующие подклассы конкретных
строителей их реализуют подходящим образом, например,
создают или получают нужные ресурсы, сохраняют
промежуточные результаты, контролируют результаты
выполнения операций.
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);
}
}
http://www.slideshare.net/IgorShkulipa 27
Классы-строители
interface ICompBuilder {
Computer Build();
}
class GameCompBuilder : ICompBuilder {
private Computer computer;
public GameCompBuilder() { computer = new Computer(); }
Computer ICompBuilder.Build() {
computer.Name = "Game Computer";
computer.CPU = "Core i7 3.0 GHz";
computer.RAM = "8 Gb";
computer.HDD = "1 Tb";
computer.VGA = "GeForce GTX 560";
return computer;
} }
class OfficeCompBuilder : ICompBuilder {
private Computer computer;
public OfficeCompBuilder() { computer = new Computer(); }
Computer ICompBuilder.Build() {
computer.Name = "Office Computer";
computer.CPU = "Core i3 3.0 GHz";
computer.RAM = "2 Gb";
computer.HDD = "500 Gb";
computer.VGA = "Intel GMA 4000";
return computer;
} }
http://www.slideshare.net/IgorShkulipa 28
Класс-директор
class Director
{
private ICompBuilder builder;
public Director() { }
public void SetBuilder(ICompBuilder builder)
{
this.builder = builder;
}
public Computer GetComp()
{
return builder.Build();
}
}
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
http://www.slideshare.net/IgorShkulipa 30
StringBuilder
Предоставляет изменяемую строку символов.
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StringBuilder : ISerializable
Операция объединения объекта String всегда создает новый объект из
существующей строки и новых данных. Объект StringBuilder
поддерживает буфер для размещения и конкатенации новых данных.
Новые данные добавляются в имеющийся буфер только в том случае,
если в нем имеется достаточное свободное пространство для их
размещения, в противном случае выделяется новый буфер
достаточного размера, данные из оригинального буфера копируются в
другой буфер, и новые данные добавляются уже в новый буфер.
http://www.slideshare.net/IgorShkulipa 31
Пример
class Program
{
static void Main(string[] args)
{
string strText1 = "Hello" + "," + " " + "World" + "!";
string strText2 = "";
StringBuilder strBuilder = new StringBuilder(strText2);
strBuilder.Append("Hello");
strBuilder.Append(",");
strBuilder.Append(" ");
strBuilder.Append("World");
strBuilder.Append("!");
strText2 = strBuilder.ToString();
Console.WriteLine(strText1);
Console.WriteLine(strText2);
Console.ReadKey();
}
}
Hello, World!
Hello, World!
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
http://www.slideshare.net/IgorShkulipa 33
Классы Regex и Match
Regex предлагает следующие функциональные возможности подбора
шаблонов:
• Проверка совпадения. Вызов метода IsMatch позволяет
определить, присутствует ли соответствие.
• Извлечения одного совпадения. Вызов метода Match позволяет
извлечь объект Match, который представляет первое совпадение,
найденное в строке или в части строки. Последующие совпадения
можно извлечь, вызвав метод Match.NextMatch.
• Извлечение всех совпадений. Вызов метода Matches позволяет
извлечь объект System.Text.RegularExpressions.MatchCollection,
который представляет все совпадения, найденные в строке или в
части строки.
• Замена совпадающего текста. Вызов метода Replace позволяет
заменить совпадающий текст. Регулярным выражением также
может быть определен текст замещения. Кроме того, некоторые
методы Replace включают параметр MatchEvaluator, который
позволяет программно определить текст замены.
• Создание массива строк, сформированный на основе части
входной строки. Вызов метода Split позволяет разбить входную
строку в позициях, определенных регулярным выражением.
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();
}
}
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.
http://www.slideshare.net/IgorShkulipa 36
Лабораторная работа № 5. Строки и коллекции
• Создать словарь «ошибочных слов», например привет-првиет-
пирвет...
• На основе этого словаря, исправить ошибки в текстовых файлах в
указанной директории.
• В этих же файлах, с помощью регулярных выражений, найти и
заменить все номера мобильных телефонов
с (012) 345-67-89 на +380 12 345 67 89.

More Related Content

What's hot

5. java lecture io
5. java lecture io5. java lecture io
5. java lecture ioMERA_school
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.
Unguryan Vitaliy
 
C++ осень 2012 лекция 4
C++ осень 2012 лекция 4C++ осень 2012 лекция 4
C++ осень 2012 лекция 4Technopark
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
muqaddas_m
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. Перечисленияю
Unguryan Vitaliy
 
Java. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторы
Unguryan Vitaliy
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
Unguryan Vitaliy
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
Unguryan Vitaliy
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8
Ilya Lapitan
 
Include and extend in Ruby
Include and extend in RubyInclude and extend in Ruby
Include and extend in Ruby
yalegko
 
07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в Java07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в Java
Roman Brovko
 
Stream API
Stream APIStream API
Stream API
Unguryan Vitaliy
 
05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics
Roman Brovko
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.
Unguryan Vitaliy
 
модуль 13 использование коллекций
модуль 13 использование коллекциймодуль 13 использование коллекций
модуль 13 использование коллекций
Yevgeniy Gertsen
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
Unguryan Vitaliy
 

What's hot (17)

5. java lecture io
5. java lecture io5. java lecture io
5. java lecture io
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.
 
C++ осень 2012 лекция 4
C++ осень 2012 лекция 4C++ осень 2012 лекция 4
C++ осень 2012 лекция 4
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. Перечисленияю
 
Java. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторы
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8
 
Include and extend in Ruby
Include and extend in RubyInclude and extend in Ruby
Include and extend in Ruby
 
07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в Java07 - Java. Элементы функционального программирования в Java
07 - Java. Элементы функционального программирования в Java
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
 
Stream API
Stream APIStream API
Stream API
 
05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics05 - Java. Collections Framework и Generics
05 - Java. Collections Framework и Generics
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.
 
модуль 13 использование коллекций
модуль 13 использование коллекциймодуль 13 использование коллекций
модуль 13 использование коллекций
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 

Viewers also liked

Organists Review.compressed
Organists Review.compressedOrganists Review.compressed
Organists Review.compressedJamie Singleton
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
Igor Shkulipa
 
CV
CVCV
Production diary 9
Production diary 9Production diary 9
Production diary 9
Laila Jaleel
 
Trabajo completo
Trabajo completo Trabajo completo
Trabajo completo
Ida Morán
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
Igor Shkulipa
 
Production diary 3
Production diary 3Production diary 3
Production diary 3
Laila Jaleel
 
BIG BEN
BIG BENBIG BEN
BIG BEN
carmen1302
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
Natalia Camacho
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesia
dyahsudorowreti
 
Modul 5 Oppgave 1
Modul 5 Oppgave 1Modul 5 Oppgave 1
Modul 5 Oppgave 1
Ketilarm
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
Anwar Pérez
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
Steve Gillick
 
Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"
Janet de Acevedo Macdonald
 
EE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile TooEE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile Too
bentgate
 
Company | How it works
Company | How it worksCompany | How it works
Company | How it works
GREXdotIN
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
Igor Shkulipa
 
Production diary 5
Production diary 5Production diary 5
Production diary 5
Laila Jaleel
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 

Viewers also liked (20)

Organists Review.compressed
Organists Review.compressedOrganists Review.compressed
Organists Review.compressed
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
CV
CVCV
CV
 
Production diary 9
Production diary 9Production diary 9
Production diary 9
 
Trabajo completo
Trabajo completo Trabajo completo
Trabajo completo
 
C# Desktop. Занятие 12.
C# Desktop. Занятие 12.C# Desktop. Занятие 12.
C# Desktop. Занятие 12.
 
Production diary 3
Production diary 3Production diary 3
Production diary 3
 
BIG BEN
BIG BENBIG BEN
BIG BEN
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
10 hewan langka di indonesia
10 hewan langka di indonesia10 hewan langka di indonesia
10 hewan langka di indonesia
 
Modul 5 Oppgave 1
Modul 5 Oppgave 1Modul 5 Oppgave 1
Modul 5 Oppgave 1
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
 
Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"
 
EE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile TooEE'13 - The Modern Marketer Can be Agile Too
EE'13 - The Modern Marketer Can be Agile Too
 
Company | How it works
Company | How it worksCompany | How it works
Company | How it works
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
Production diary 5
Production diary 5Production diary 5
Production diary 5
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 

Similar to C# Desktop. Занятие 05.

Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.
Anton Moiseenko
 
Msu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std LibsMsu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std Libsolegol
 
04 Стандартная Библиотека
04 Стандартная Библиотека04 Стандартная Библиотека
04 Стандартная Библиотекаphearnot
 
Обзор Ruby
Обзор RubyОбзор Ruby
Lec 4
Lec 4Lec 4
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
Igor Shkulipa
 
Android - 03 - Multithreading, Collections
Android - 03 - Multithreading, CollectionsAndroid - 03 - Multithreading, Collections
Android - 03 - Multithreading, CollectionsNoveo
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
DmitryTrushkin
 
Underscore js
Underscore jsUnderscore js
Underscore js
Olya Nosova
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
metaform
 
C++ осень 2013 лекция 6
C++ осень 2013 лекция 6C++ осень 2013 лекция 6
C++ осень 2013 лекция 6Technopark
 
OOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene KaloshaOOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene Kalosha
Rostyslav Siryk
 
основные пространства имен и классы microsoft
основные пространства имен и классы microsoftосновные пространства имен и классы microsoft
основные пространства имен и классы microsoft
mcroitor
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
Igor Shkulipa
 
Binary Studio Academy 2016. Data structures and LINQ
Binary Studio Academy 2016. Data structures and LINQBinary Studio Academy 2016. Data structures and LINQ
Binary Studio Academy 2016. Data structures and LINQ
Binary Studio
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
PyNSK
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
JetBrains Russia
 
Контейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПКонтейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПitclub_kz
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2Technopark
 
Lec 3
Lec 3Lec 3

Similar to C# Desktop. Занятие 05. (20)

Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.
 
Msu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std LibsMsu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std Libs
 
04 Стандартная Библиотека
04 Стандартная Библиотека04 Стандартная Библиотека
04 Стандартная Библиотека
 
Обзор Ruby
Обзор RubyОбзор Ruby
Обзор Ruby
 
Lec 4
Lec 4Lec 4
Lec 4
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Android - 03 - Multithreading, Collections
Android - 03 - Multithreading, CollectionsAndroid - 03 - Multithreading, Collections
Android - 03 - Multithreading, Collections
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
 
Underscore js
Underscore jsUnderscore js
Underscore js
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
C++ осень 2013 лекция 6
C++ осень 2013 лекция 6C++ осень 2013 лекция 6
C++ осень 2013 лекция 6
 
OOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene KaloshaOOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene Kalosha
 
основные пространства имен и классы microsoft
основные пространства имен и классы microsoftосновные пространства имен и классы microsoft
основные пространства имен и классы microsoft
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 
Binary Studio Academy 2016. Data structures and LINQ
Binary Studio Academy 2016. Data structures and LINQBinary Studio Academy 2016. Data structures and LINQ
Binary Studio Academy 2016. Data structures and LINQ
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
 
Контейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПКонтейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООП
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2
 
Lec 3
Lec 3Lec 3
Lec 3
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 

C# Desktop. Занятие 05.

  • 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.
  • 5. http://www.slideshare.net/IgorShkulipa 5 System.Array методы Обнуление: Clear(); Поиск: LastIndexOf(), IndexOf(), Find(), FindAll(), FindIndex(), FindLastIndex(), FindLast(), Сортировка: Sort() Неглубокое копирование: Clone() Глубокое копирование: Copy(), CopyTo() Длина: GetLength() Значение: GetValue()
  • 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, позволяющая разделить классы коллекций и алгоритмов. • Придает обходу коллекции "объектно-ориентированный статус". • Полиморфный обход.
  • 13. http://www.slideshare.net/IgorShkulipa 13 Интерфейсы public interface IIterator { object Next(); object First(); bool Finished(); object Current(); } public interface IIterCollection { IIterator GetIterator(); }
  • 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; } }
  • 15. http://www.slideshare.net/IgorShkulipa 15 Реализация итератора public class Iterator : IIterator { private IterCollection collection; private int current; public Iterator(IterCollection col) { collection = col; current = 0; } object IIterator.First() { return collection.Get(0); } object IIterator.Current() { return collection.Get(current); } bool IIterator.Finished() { return (current >= collection.GetCount()); } object IIterator.Next() { return collection.Get(current++); } }
  • 16. http://www.slideshare.net/IgorShkulipa 16 Использование class Program { static void Main(string[] args) { IIterCollection ic = new IterCollection(10); IIterator iter = ic.GetIterator(); while (!iter.Finished()) { Console.WriteLine(iter.Next()); } Console.ReadKey(); } } 0 7 5 2 9 9 5 0 5 9
  • 17. http://www.slideshare.net/IgorShkulipa 17 Альтернативная реализация public class SquareCollection : IEnumerable<int> { private int[][] items; public SquareCollection(int number) { Random rand = new Random(); this.items = new int[number][]; for (int i = 0; i < number; i++) { int[] item = new int[number]; for (int j = 0; j < number; j++) { item[j] = rand.Next() % 10; } this.items[i] = item; } } public IEnumerator<int> GetEnumerator() { for (int i = 0; i < items.Length; i++) { for (int j = items[i].Length - 1; j >= 0; j--) { yield return items[i][j]; } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }
  • 18. http://www.slideshare.net/IgorShkulipa 18 Использование class Program { static void Main(string[] args) { SquareCollection sc = new SquareCollection(10); foreach (var item in sc) { Console.WriteLine(item); } Console.ReadKey(); } } 5 0 1 5 2 6 7 1 3 9 5 0 3 8 2 ...
  • 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); } }
  • 27. http://www.slideshare.net/IgorShkulipa 27 Классы-строители interface ICompBuilder { Computer Build(); } class GameCompBuilder : ICompBuilder { private Computer computer; public GameCompBuilder() { computer = new Computer(); } Computer ICompBuilder.Build() { computer.Name = "Game Computer"; computer.CPU = "Core i7 3.0 GHz"; computer.RAM = "8 Gb"; computer.HDD = "1 Tb"; computer.VGA = "GeForce GTX 560"; return computer; } } class OfficeCompBuilder : ICompBuilder { private Computer computer; public OfficeCompBuilder() { computer = new Computer(); } Computer ICompBuilder.Build() { computer.Name = "Office Computer"; computer.CPU = "Core i3 3.0 GHz"; computer.RAM = "2 Gb"; computer.HDD = "500 Gb"; computer.VGA = "Intel GMA 4000"; return computer; } }
  • 28. http://www.slideshare.net/IgorShkulipa 28 Класс-директор class Director { private ICompBuilder builder; public Director() { } public void SetBuilder(ICompBuilder builder) { this.builder = builder; } public Computer GetComp() { return builder.Build(); } }
  • 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 поддерживает буфер для размещения и конкатенации новых данных. Новые данные добавляются в имеющийся буфер только в том случае, если в нем имеется достаточное свободное пространство для их размещения, в противном случае выделяется новый буфер достаточного размера, данные из оригинального буфера копируются в другой буфер, и новые данные добавляются уже в новый буфер.
  • 31. http://www.slideshare.net/IgorShkulipa 31 Пример class Program { static void Main(string[] args) { string strText1 = "Hello" + "," + " " + "World" + "!"; string strText2 = ""; StringBuilder strBuilder = new StringBuilder(strText2); strBuilder.Append("Hello"); strBuilder.Append(","); strBuilder.Append(" "); strBuilder.Append("World"); strBuilder.Append("!"); strText2 = strBuilder.ToString(); Console.WriteLine(strText1); Console.WriteLine(strText2); Console.ReadKey(); } } Hello, World! Hello, World!
  • 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.