Слайд 2
Символы char
Символьный тип char предназначен для хранения символа
в кодировке Unicode.
Символьный тип относится к встроенным типам
данных С# и соответствует стандартному классу Сhar библиотеки .Net из пространства имен System.
Слайд 4
static 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
if (char.IsLower(a[x])) a[x]=char.ToUpper(a[x]);
PrintArray("Измененный массив а:", a);
PrintArray("Исходный массив b:", b);
Array.Reverse(b);
PrintArray("Измененный массив b:", b);
}
static void PrintArray(string line, Array a)
{
Console.WriteLine(line);
foreach( object x in a) Console.Write(x);
Console.WriteLine('\n');
}
Слайд 7
Неизменяемые строки string
Тип string, предназначенный для работы со
стоками символов в кодировке Unicode.
Ему соответствует базовый тип
класса System.String библиотеки .Net.
Каждый объект string - это неизменяемая последовательность символов Unicode, т.е. методы, предназначенные для изменения строк, возвращают измененные копии, исходные же строки остаются неизменными.
Слайд 10
вызов статических методов происходит через обращение к имени
класса:
String.Concat(str1, str2)
в остальных случаях через обращение к
экземплярам класса:
str.ToLower()
Слайд 11
class 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 < 0) Console.WriteLine("str1 меньше, чем str3");
else Console.WriteLine("str1 больше, чем str3");
Console.WriteLine();
Слайд 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);
} } }
Слайд 14
class Program
{
// методы разделения
строки на элементы Split и слияние массива строк в
единую строку Join
static void Main()
{
string poems = "тучки небесные вечные странники";
char[] div = { ' '}; //создаем массив разделителей
// Разбиваем строку на части,
string[] parts = poems.Split(div);
Console.WriteLine("Результат разбиения строки на части: ");
for (int i = 0; i < parts.Length; i++)
Console.WriteLine(parts[i]);
// Теперь собираем эти части в одну строку, в качестве разделителя используем символ |
string whole = String.Join(" | ", parts);
Console.WriteLine("Результат сборки: ");
Console.WriteLine(whole);
} }
Слайд 15
При работе с объектами класса string нужно учитывать
их свойство неизменяемости, т.е. методы изменяют не сами строки,
а их копии.
string a="";
for (int i = 1; i <= 100; i++) a +="!";
Console.WriteLine(a);
В этом случае в памяти компьютера будет сформировано 100 различных строк вида:
!
!!
!!!
…
!!!...!!
Только последняя строка будет храниться в переменной а.
Ссылки на все остальные строчки будут потеряны, но эти строки будут храниться в памяти компьютера и засорять память. Бороться с таким засорением придется сборщику мусора, что будет сказываться на производительности программы, поэтому если нужно изменять строку, то лучше пользоваться классом StringBuilder.
Слайд 16
Изменяемые строки
Чтобы создать строку, которую можно изменять, в
С# предусмотрен класс StringBuilder, определенный в пространстве имен System.Text.
Объекты этого класса всегда объявляются с явным вызовом конструктора класса (через операцию new) .
Слайд 17
static 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();
}
Слайд 19
using 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 < a.Length; ++i)
if (char.IsDigit(a[i])) k += int.Parse(a[i].ToString());
Console.WriteLine(k);
}
}
}
Слайд 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);
}
}
}
Слайд 35
using 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);
}
}
}