c# desktop. Занятие 05

36
Темы лекции: Строки, массивы, коллекции. Практическое задание: Строки, массивы, коллекции. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 5

Upload: igor-shkulipa

Post on 21-Mar-2017

168 views

Category:

Education


2 download

TRANSCRIPT

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

Темы лекции: Строки, массивы, коллекции.

Практическое задание: Строки, массивы, коллекции.

Тренер: Игорь Шкулипа, к.т.н.

Платформа .Net и язык программирования C#.

Занятие 5

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

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};

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

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”};

В этом случае компилятор попытается определить тип массива, как и впредыдущем примере, не сможет этого сделать и выдаст исключение

Не найдено подходящего типа для неявно типизированного массива

Такое же исключение возникнет в случае, если попытаться объявить массив с типами, которые приводимы друг к другу (например, если объявлены два класса с неявными преобразованиям один к другому)

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

http://www.slideshare.net/IgorShkulipa 4

Sytem.Array свойства

Имя Описание

IsFixedSizeПолучает значение, показывающее, имеет ли список Array фиксированный размер.

IsReadOnlyПолучает значение, указывающее, доступен ли объект Array только для чтения.

IsSynchronizedПолучает значение, показывающее, является ли доступ к коллекции Array синхронизированным (потокобезопасным).

LengthПолучает 32-разрядное целое число, представляющее общее число элементов во всех измерениях массива Array.

LongLengthПолучает 64-разрядное целое число, представляющее общее число элементов во всех измерениях массива Array.

Rank Получает ранг (размерность) объекта Array.

SyncRootПолучает объект, который может использоваться для синхронизации доступа к объекту Array.

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

http://www.slideshare.net/IgorShkulipa 5

System.Array методы

Обнуление:Clear();

Поиск:LastIndexOf(), IndexOf(), Find(),

FindAll(), FindIndex(), FindLastIndex(),

FindLast(),

Сортировка:Sort()

Неглубокое копирование:Clone()

Глубокое копирование:Copy(), CopyTo()

Длина:GetLength()

Значение:GetValue()

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

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};

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

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.

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

http://www.slideshare.net/IgorShkulipa 8

System.Collections

Класс Описание

ArrayListРеализует интерфейс IList с помощью массива с динамическим увеличением размера до нужного значения.

BitArrayУправляет компактным битовым массивом значений, представленных логическими значениями, где значение true соответствует 1, а значение false соответствует 0.

CaseInsensitiveComparer Проверяет равенство двух объектов без учета регистра строк.

CaseInsensitiveHashCodeProvider

Устаревшее. Предоставляет хэш-код объекта, используя алгоритм хэширования, при котором не учитывается регистр строк.

CollectionBaseПредоставляет базовый класс abstract для строго типизированной коллекции.

Comparer Проверяет равенство двух объектов с учетом регистра строк.

DictionaryBaseПредоставляет базовый класс abstract для строго типизированной коллекции ключ/значение.

HashtableПредоставляет коллекцию пар "ключ-значение", которые упорядочены по хэш-коду ключа.

QueueПредоставляет коллекцию объектов, которая обслуживается по принципу "первым поступил — первым обслужен".

ReadOnlyCollectionBaseПредоставляет базовый класс abstract для неуниверсальной коллекции со строгим типом, которая доступна только для чтения.

SortedListПредоставляет коллекцию пар "ключ-значение", упорядоченных по ключам. Доступ к парам можно получить по ключу и по индексу.

StackПредставляет простую неуниверсальную коллекцию объектов, действующую по принципу LIFO.

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

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();

}

}

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

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> — это гибрид списка и словаря, которыйпредоставляет способ хранения объектов, содержащих свои собственные ключи.

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

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

...

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

http://www.slideshare.net/IgorShkulipa 12

Паттерн Iterator

Назначение паттерна Iterator

• Предоставляет способ последовательного доступа ко всемэлементам составного объекта, не раскрывая его внутреннегопредставления.

• Абстракция в стандартных библиотеках C++ и Java, позволяющаяразделить классы коллекций и алгоритмов.

• Придает обходу коллекции "объектно-ориентированный статус".

• Полиморфный обход.

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

http://www.slideshare.net/IgorShkulipa 13

Интерфейсы

public interface IIterator

{

object Next();

object First();

bool Finished();

object Current();

}

public interface IIterCollection

{

IIterator GetIterator();

}

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

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;

}

}

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

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++);

}

}

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

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

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

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();

}

}

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

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

...

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

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.

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

http://www.slideshare.net/IgorShkulipa 20

Методы

• Contains () — позволяет узнать, содержит ли строка подстроку, переданнуюв качестве параметра.

• Format () — это статичный метод, который позволяет форматировать строки, какв консольных приложениях.

• IndexOf () — возвращает индекс символа, начиная с которого в строке найденаподстрока.

• Insert () — позволяет вставить подстроку, переданную во втором параметре, встроку, начиная с символа, указанного в первом параметре. При этомпеременная str не изменяется, а новая строка просто возвращается в видерезультата.

• Remove () — удаляет из строки символы, начиная с индекса, указанного вкачестве первого параметра, и ровно столько символов, сколько указано вовтором параметре. Сама строка не изменяется, измененный вариантвозвращается в качестве результата.

• Replace () — ищет в строке подстроку, указанную в качестве первогопараметра, и заменяет ее на подстроку из второго параметра, возвращаярезультат замены.

• ToUpper () и ToLower () — возвращают строку, в которой все символыприведены к верхнему ( ToUpper ()) или к нижнему (ToLower ()) регистру.

• Substring () — возвращает часть строки, начиная с символа, указанного вкачестве первого параметра, и ровно столько символов, сколько указано вовтором параметре.

• ToCharArray () — превращает строку в массив символов. Метод очень удобен,когда нужно проанализировать строку посимвольно.

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

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, версия предыдущегопункта с переменной длиной цифр кода

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

http://www.slideshare.net/IgorShkulipa 22

Форматы строк

Интерфейс IFormatProvider предоставляет механизм извлечения объектадля управления форматированием.

.NET включает следующие три предопределенные реализацииIFormatProvider :• Класс NumberFormatInfo, который предоставляет сведения,

используемые для форматирования чисел, таких как валюта,разделитель разрядов, и десятичный разделитель дляопределенного языка и региональных параметров.

• Класс DateTimeFormatInfo, предоставляющий сведения,используемые для форматирования дат и времени, таких каксимволы разделителя даты и времени для определенного языка ирегиональных параметров или порядок и форма компонентов год,месяц и день.

• Класс CultureInfo, представляющий определенный язык ирегиональные параметры. Метод GetFormat возвращаетрегиональный объект NumberFormatInfo или DateTimeFormatInfo,в зависимости от того, используется ли объект CultureInfo вформатирование или анализе операции, которая включает числаили дату и время.

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

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

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

http://www.slideshare.net/IgorShkulipa 24

Паттерн Builder

Паттерн Builder может помочь в решении следующих задач:

◦ В системе могут существовать сложные объекты, созданиекоторых за одну операцию затруднительно или невозможно.Требуется поэтапное построение объектов с контролемрезультатов выполнения каждого этапа.

◦ Данные должны иметь несколько представлений. Например,если есть некоторый исходный документ в формате RTF (RichText Format), в общем случае содержащий текст,графические изображения и служебную информацию оформатировании (размер и тип шрифтов, отступы и др.).Если этот документ в формате RTF преобразовать в другиеформаты (например, Microsoft Word или простой ASCII-текст), то полученные документы и будут представлениямиисходных данных.

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

http://www.slideshare.net/IgorShkulipa 25

Описание паттерна Builder

Паттерн Builder отделяет алгоритм поэтапного конструированиясложного объекта от его внешнего представления так, что спомощью одного и того же алгоритма можно получать разныепредставления этого объекта.

Для этого паттерн Builder определяет алгоритм поэтапногосоздания продукта в специальном классе Director(распорядитель), а ответственность за координацию процессасборки отдельных частей продукта возлагает на иерархиюклассов Builder. В этой иерархии базовый класс Builderобъявляет интерфейс для построения отдельных частейпродукта, а соответствующие подклассы конкретныхстроителей их реализуют подходящим образом, например,создают или получают нужные ресурсы, сохраняютпромежуточные результаты, контролируют результатывыполнения операций.

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

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);

}

}

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

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;

} }

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

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();

}

}

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

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

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

http://www.slideshare.net/IgorShkulipa 30

StringBuilder

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

[SerializableAttribute]

[ComVisibleAttribute(true)]

public sealed class StringBuilder : ISerializable

Операция объединения объекта String всегда создает новый объект изсуществующей строки и новых данных. Объект StringBuilderподдерживает буфер для размещения и конкатенации новых данных.Новые данные добавляются в имеющийся буфер только в том случае,если в нем имеется достаточное свободное пространство для ихразмещения, в противном случае выделяется новый буфердостаточного размера, данные из оригинального буфера копируются вдругой буфер, и новые данные добавляются уже в новый буфер.

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

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!

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

http://www.slideshare.net/IgorShkulipa 32

Регулярные выражения

Пространство имен System.Text.RegularExpressions предоставляет классыдля работы с регулярными выражениями.

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

Пример:

string emailExpression =

"[.\\-_a-z0-9]+@([a-z0-9][\\-a-z0-9]+\\.)+[a-z]{2,6}";

Ссылка на справочник по языку регулярных выражений .NEThttp://msdn.microsoft.com/ru-ru/library/az24scfc.aspx

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

http://www.slideshare.net/IgorShkulipa 33

Классы Regex и Match

Regex предлагает следующие функциональные возможности подборашаблонов:

• Проверка совпадения. Вызов метода IsMatch позволяетопределить, присутствует ли соответствие.

• Извлечения одного совпадения. Вызов метода Match позволяетизвлечь объект Match, который представляет первое совпадение,найденное в строке или в части строки. Последующие совпаденияможно извлечь, вызвав метод Match.NextMatch.

• Извлечение всех совпадений. Вызов метода Matches позволяетизвлечь объект System.Text.RegularExpressions.MatchCollection,который представляет все совпадения, найденные в строке или вчасти строки.

• Замена совпадающего текста. Вызов метода Replace позволяетзаменить совпадающий текст. Регулярным выражением такжеможет быть определен текст замещения. Кроме того, некоторыеметоды Replace включают параметр MatchEvaluator, которыйпозволяет программно определить текст замены.

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

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

http://www.slideshare.net/IgorShkulipa 34

Пример

class Program

{

static void Main(string[] args)

{

string strText =

"Lorem ipsum dolor sit amet, [email protected] consectetur adipiscing elit. "+

"In posuere, elit ut tristique condimentum, lectus est sodales nibh, "+

"sed adipiscing velit [email protected] lectus vel felis. Praesent id urna "+

"ut quam dapibus sollicitudin sit amet et mi. Quisque in magna nisi, in "+

"scelerisque mi [email protected]! 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 [email protected] 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();

}

}

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

http://www.slideshare.net/IgorShkulipa 35

Результат

Lorem ipsum dolor sit amet, [email protected] consectetur adipiscing elit.

In posuere, elit ut tristique condimentum, lectus est sodales nibh, sed adipisci

ng velit [email protected] lectus vel felis. Praesent id urna ut quam dapibus soll

icitudin sit amet et mi. Quisque in magna nisi, in scelerisque mi [email protected]

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 [email protected] in.

[email protected]

[email protected]

[email protected]

[email protected]

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.

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

http://www.slideshare.net/IgorShkulipa 36

Лабораторная работа № 5. Строки и коллекции

• Создать словарь «ошибочных слов», например привет-првиет-пирвет...

• На основе этого словаря, исправить ошибки в текстовых файлах вуказанной директории.

• В этих же файлах, с помощью регулярных выражений, найти изаменить все номера мобильных телефоновс (012) 345-67-89 на +380 12 345 67 89.