Слайд 1Символы и строки
символы char, неизменяемые строки string, изменяемые строки StringBilder, регулярные выражения Regex
Слайд 2Символы char
Символьный тип char предназначен для хранения символа в кодировке Unicode. Символьный тип относится к встроенным типам данных С# и соответствует стандартному классу Сhar библиотеки .Net из пространства имен System.
Слайд 4static void Main() { try { char b = 'B', c = '\x64', d = '\uffff'; Console.WriteLine("{0}, {1}, {2}", b, c, d); Console.WriteLine("{0}, {1}, {2}", char.ToLower(b), char.ToUpper(c), char.GetNumericValue(d)); char a; do //цикл выполнятеся до тех пор, пока не ввели символ e { Console.WriteLine("Введите символ: "); a = char.Parse(Console.ReadLine()); Console.WriteLine("Введен символ {0}, его код {1}, его категория {2}", a, (int)a, char.GetUnicodeCategory(a)); if (char.IsLetter(a)) Console.WriteLine("Буква"); if (char.IsUpper(a)) Console.WriteLine("Верхний регистр"); if (char.IsLower(a)) Console.WriteLine("Нижний регистр"); if (char.IsControl(a)) Console.WriteLine("Управляющий символ"); if (char.IsNumber(a)) Console.WriteLine("Число"); if (char.IsPunctuation(a)) Console.WriteLine("Разделитель"); } while (a != 'e'); } catch { Console.WriteLine("Возникло исключение"); } }
Слайд 6//Организация массива символов и работа с ним на основе базового класса Array: static void Main() { char[] a ={ 'm', 'a', 'Х', 'i', 'M', 'u', 'S' , '!', '!', '!' }; char [] b="кол около колокола".ToCharArray(); //преобразование строки в массив символов PrintArray("Исходный массив а:", a); for (int x=0;x
Слайд 7Неизменяемые строки string
Тип string, предназначенный для работы со стоками символов в кодировке Unicode. Ему соответствует базовый тип класса System.String библиотеки .Net. Каждый объект string - это неизменяемая последовательность символов Unicode, т.е. методы, предназначенные для изменения строк, возвращают измененные копии, исходные же строки остаются неизменными.
Слайд 9Методы работы со строками
Слайд 10вызов статических методов происходит через обращение к имени класса: String.Concat(str1, str2) в остальных случаях через обращение к экземплярам класса: str.ToLower()
Слайд 11class Program { static void Main() { string str1 = "Первая строка"; string str2 = string.Copy(str1); string str3 = "Вторая строка«; string str4 = "ВТОРАЯ строка"; string strUp, strLow; int result, idx; Console.WriteLine("str1: " + str1); Console.WriteLine("str3: " + str3); Console.WriteLine("str4: " + str4); Console.WriteLine("Длина строки str1: " + str1.Length); // Создаем прописную и строчную версии строки str1. strLow = str1.ToLower(); strUp = str1.ToUpper(); Console.WriteLine("Строчная версия строки str1: " + strLow); Console.WriteLine("Прописная версия строки str1: " + strUp); Console.WriteLine(); // Сравниваем строки, result = str1.CompareTo(str3); if (result == 0) Console.WriteLine("str1 и str3 равны."); else if (result
Слайд 12//сравниваем строки без учета регистра result = String.Compare(str3, str4, true); if (result == 0) Console.WriteLine("str3 и str4 равны без учета регистра."); else Console.WriteLine("str3 и str4 не равны без учета регистра."); Console.WriteLine(); //сравниваем части строк result = String.Compare(str1, 4, str2, 4, 2); if (result == 0) Console.WriteLine("часть str1 и str2 равны"); else Console.WriteLine("часть str1 и str2 не равны"); Console.WriteLine(); // Поиск строк. idx = str2.IndexOf("строка"); Console.WriteLine("Индекс первого вхождения подстроки строка: " + idx); idx = str2.LastIndexOf("о"); Console.WriteLine("Индекс последнего вхождения символа о: " + idx); //конкатенация string str = String.Concat(str1, str2, str3, str4); Console.WriteLine("конкатенация"+ str); //удаление подстроки str = str.Remove(0, str1.Length); Console.WriteLine(str); //замена подстроки "строка" на пустую подстроку str = str.Replace("строка", ""); Console.WriteLine(str); } } }
Слайд 14class Program { // методы разделения строки на элементы Split и слияние массива строк в единую строку Join static void Main() { string poems = "тучки небесные вечные странники"; char[] div = { ' '}; //создаем массив разделителей // Разбиваем строку на части, string[] parts = poems.Split(div); Console.WriteLine("Результат разбиения строки на части: "); for (int i = 0; i
Слайд 15При работе с объектами класса string нужно учитывать их свойство неизменяемости, т.е. методы изменяют не сами строки, а их копии.
string a=""; for (int i = 1; i
Только последняя строка будет храниться в переменной а. Ссылки на все остальные строчки будут потеряны, но эти строки будут храниться в памяти компьютера и засорять память. Бороться с таким засорением придется сборщику мусора, что будет сказываться на производительности программы, поэтому если нужно изменять строку, то лучше пользоваться классом StringBuilder.
Слайд 16Изменяемые строки
Чтобы создать строку, которую можно изменять, в С# предусмотрен класс StringBuilder, определенный в пространстве имен System.Text. Объекты этого класса всегда объявляются с явным вызовом конструктора класса (через операцию new) .
Слайд 17static void Main() { try { StringBuilder str=new StringBuilder("Площадь"); PrintString(str); str.Append(" треугольника равна"); PrintString(str); str.AppendFormat(" {0} см ", 123.456); PrintString(str); str.Insert(8, "данного "); PrintString(str); str.Remove(7, 21); PrintString(str); str.Replace("а", "о"); PrintString(str); StringBuilder str1=new StringBuilder(Console.ReadLine()); StringBuilder str2=new StringBuilder(Console.ReadLine()); Console.WriteLine(str1.Equals(str2)); } catch { Console.WriteLine("Вознико исключение"); } } static void PrintString(StringBuilder a) { Console.WriteLine("Строка: "+a); Console.WriteLine("Текущая длина строки " +a.Length); Console.WriteLine("Объем буфера "+a.Capacity); Console.WriteLine("Максимальный объем буфера "+a.MaxCapacity); Console.WriteLine(); }
Слайд 19using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { //С изменяемой строкой можно работать не только как с объектом, но как с массивом символов: static void Main() { StringBuilder a = new StringBuilder("2*3=3*2"); Console.WriteLine(a); int k = 0; for (int i = 0; i
Слайд 20Регулярные выражения
Регулярное выражение – это шаблон, по которому выполняется поиск соответствующего фрагмента текста. Эффективный поиск в тексте по заданному шаблону; Редактирование текста; Формирование итоговых отчетов по результатам работы с текстом.
Слайд 21Метасимволы в регулярных выражениях
Язык описания регулярных выражений состоит из символов двух видов: обычных символов и метасимволов. Обычный символ представляет в выражении сам себя, а метасимвол – некоторый класс символов.
Слайд 23Кроме метасимволов, обозначающие классы символов, могут применяться уточняющие метасимволы:
Слайд 24Повторители – метасимволы, которые располагаются непосредственно после обычного символа или группы символов и задают количество его повторений в выражении
Слайд 25Регулярное выражение записывается в виде строкового литерала, перед строкой необходимо ставить символ @. Символ @ можно не ставить, если в качестве шаблона используется шаблон без метасимволов. Если нужно найти какой-то символ, который является метасимволом (например, точку), можно это сделать защитив ее обратным слэшем. Т.е. просто точка означает любой одиночный символ, а \. означает просто точку. Примеры регулярных выражений: слово rus – @"rus" или "rus« № телефона в формате xxx-xx-xx – @"\d\d\d-\d\d-\d\d" или @"\d{3}(-\d\d){2} " номер автомобиля - @"[A-Z]\d{3}[A-Z]{2}\d{2,3}RUS"
Слайд 26Поиск в тексте по шаблону
Пространство имен библиотеки базовых классов System.Text.RegularExpressions содержит все объекты платформы .NET Framework, имеющие отношение к регулярным выражениям. Класс, поддерживающий регулярные выражения, - класс Regex, он представляет неизменяемые откомпилированные регулярные выражения. Для описания регулярного выражения в классе определено несколько перегруженных конструкторов: Regex() – создает пустое выражение; Regex(String) – создает заданное выражение; Regex(String, RegexOptions) – создает заданное выражение и задает параметры для его обработки с помощью элементов перечисления RegexOptions (например, различать или нет прописные и строчные буквы).
Слайд 27Поиск фрагментов строки, соответствующих заданному выражению, выполняется с помощью методов класса Regex: IsMach, Mach, Matches.
Слайд 28/*Метод IsMach возвращает true, если фрагмент, соответствующий выражению, в заданной строке найден, и false в противном случае*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { static void Main() { Regex r = new Regex("собака", RegexOptions.IgnoreCase); string text1 = "Кот в доме, собака в конуре."; string text2 = "Котик в доме, собачка в конуре."; Console.WriteLine(r.IsMatch(text1)); Console.WriteLine(r.IsMatch(text2)); } } }
RegexOptions.IgnoreCase – означает, что регулярное выражение применяется без учеба регистра символов
Слайд 29/* Можно использовать конструкцию выбора из нескольких элементов. Варианты выбора перечисляются через вертикальную черту*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Regex r = new Regex("собака|кот",RegexOptions.IgnoreCase); string text1 = "Кот в доме, собака в конуре."; string text2 = "Котик в доме, собачка в конуре."; Console.WriteLine(r.IsMatch(text1)); Console.WriteLine(r.IsMatch(text2)); } } }
Слайд 30//есть ли в заданных строках номера телефона в формате xx-xx-xx или xxx-xx-xx: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { static void Main() { Regex r = new Regex(@"\d{2,3}(-\d\d){2}"); string text1 = "tel:123-45-67"; string text2 = "tel:no"; string text3 = "tel:12-34-56"; Console.WriteLine(r.IsMatch(text1)); Console.WriteLine(r.IsMatch(text2)); Console.WriteLine(r.IsMatch(text3)); } } }
Слайд 31/*Метод Match класса Regex не просто определяет, содержится ли текст, соответствующий шаблону, а возвращает объект класса Match – последовательность фрагментов текста, совпавших с шаблоном*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { static void Main() { Regex r = new Regex(@"\d{2,3}(-\d\d){2}"); string text = @"Контакты в Минске tel:123-45-67, 123-34-56; fax:123-56-45 Контакты в Бресте tel:12-34-56; fax:12-56-45"; Match tel = r.Match(text); while (tel.Success) { Console.WriteLine(tel); tel = tel.NextMatch(); } } } }
Слайд 32//подсчитать сумму целых чисел, встречающихся в тексте: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3{ class Program { static void Main() { Regex r = new Regex(@"[-+]?\d+"); string text = @"5*10=50 -80/40=-2"; Match teg = r.Match(text); int sum = 0; while (teg.Success) { Console.WriteLine(teg); sum += int.Parse(teg.ToString()); teg = teg.NextMatch(); } Console.WriteLine("sum=" + sum); } } }
Слайд 33/*Метод Matches класса Regex возвращает объект класса MatchCollection – коллекцию всех фрагментов заданной строки, совпавших с шаблоном. При этом метод Matches многократно запускает метод Match, каждый раз начиная поиск с того места, на котором закончился предыдущий поиск*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { string text = @"5*10=50 -80/40=-2"; Regex theReg = new Regex(@"[-+]?\d+"); MatchCollection theMatches = theReg.Matches(text); foreach (Match theMatch in theMatches) { Console.Write("{0} ", theMatch.ToString()); } Console.WriteLine(); } } }
Слайд 34Редактирование текста
// метод Replace класса Regex позволяет выполнять замену одного фрагмента текста другим или удаление фрагментов текста: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { string text = @"Контакты в Минске tel:123-45-67, 123-34-56; fax:123-56-45. Контакты в Бресте tel:12-34-56; fax:11-56-45"; Console.WriteLine("Старые данные\n" + text); string newText = Regex.Replace(text, "123-", "890-"); Console.WriteLine("Новые данные\n" + newText); } } }
Слайд 35using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { // Удаление всех номеров телефонов из текста: static void Main() { string text = @"Контакты в Минске tel:123-45-67, 123-34-56; fax:123-56-45. Контакты в Бресте tel:12-34-56; fax:12-56-45"; Console.WriteLine("Старые данные\n"+text); string newText=Regex.Replace(text, @"\d{2,3}(-\d\d){2}", ""); Console.WriteLine("Новые данные\n" + newText); } } }
Слайд 36using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { //Разбиение исходного текста на фрагменты: static void Main() { string text = @"Контакты в Минске tel:123-45-67, 123-34-56; fax:123-56-45. Контакты в Бресте tel:12-34-56; fax:12-56-45"; string []newText=Regex.Split(text,"[ ,.:;]+"); foreach( string a in newText) Console.WriteLine(a); } } }