Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Метод CompareTo

Читайте также:
  1. I. Методические рекомендации курсантам по подготовке к групповому упражнению.
  2. I. Методические рекомендации курсантам по подготовке к групповому упражнению.
  3. I. Методические рекомендации курсантам по подготовке к практическому занятию.
  4. II. МЕТОДЫ ОБЕСПЕЧЕНИЯ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ РОССИЙСКОЙ ФЕДЕРАЦИИ
  5. II. МЕТОДЫ, ПОДХОДЫ И ПРОЦЕДУРЫ ДИАГНОСТИКИ И ЛЕЧЕНИЯ
  6. Nbsp;   ІІ. Опис приладів і методика вимірювання
  7. Абстрактые классы, виртуальные методы. Наследование и замещение методов.

Расстояние между символами A,Z = -25

Расстояние между символами a,A = 32

Расстояние между символами Я,А = 31

Аналізуючи ці результати, можна зрозуміти, що в кодуванні Unicode як латиниця, так і кирилиця щільно впаковані. Виключення становить російська літера "Ё" - велика й маленька - вони випадають із щільного кодування Малі літери в кодуванні безпосередньо сліду­ють за великими літерами. Відстань між алфавітами в кодуванні до­сить велика - російська літера "А" на 975 символів правіше в кодуванні, ніж відповідна літера в латинському алфавіті.

 

3.3. Клас Char[ ] - масив символів

 

У мові С# визначений клас Char[ ]. і його можна використову­вати для подання рядків постійної довжини. Крім того, оскільки масиви в С# динамічні, то можна використовувати масиви символів для по­дання рядків.

Масив char[ ] - це звичайний масив, його не можна ініціалізувати рядком символів. Константа, що задає рядок символів, належить класу String, а в С# не визначені взаємні перетворення між класами String й Char[ ]. У класу String є динамічний метод ToCharArray, що задає перетворення рядка символів у масив.

Клас Char[ ] є спадкоємцем не тільки класу Object, але й класу Array, і тому має всі методи батьківських класів. Деякі перевантажені методи класу Array можна розглядати як операції над рядками. Методи IndexOf. LastlndexOf дозволяють визначити індекси першого і останнього входження в рядок деякого символу. Однак їх не можна використову­вати для знаходження індексу входження підрядка в рядок.

 

3.4. Клас String

 

Основним типом при роботі з рядками є тип string (синонім класу String), що задає рядки змінної довжини. Клас String у мові С# відноситься до посилаль­них типів. Над рядками - об'єктами цього класу - визначений широ­кий набір операцій.

Об'єкти класу String оголошуються з явною або відкладеною ініціалізацією, з явним або неявним викликом конструктора класу. Найчастіше при оголошенні рядкової змінної конструктор явно не ви­кликається, а ініціалізація задається рядковою константою. У класу String багато конструкторів. Вони дозволяють сконструювати рядок з:

- символу, повтореного задане число раз;

- масиву символів char[ ];

- частини масиву символів.

Приклади оголошення рядків:

string world = "Мир"; //I конструктори

// string s1 = new string("s1"); - не припустимо

// string s2 = new string(); - не припустимо

string sssss = new string('s', 5);

char[] yes = "Yes".ToCharArray();

string stryes = new string(yes);

string strye = new string(yes, 0, 2);

Console.WriteLine("\nworld={0}; sssss={1}; stryes={2}; strye= {3}",

world, sssss, stryes, strye);

string stry = new string(yes, 1, 2);

Console.WriteLine("world={0}; sssss={1}; stryes={2}; stry= {3}",

world, sssss, stryes, stry);

 

Об'єкт world створений без явного виклику конструктора, а об'єкти sssss, stryes, strye створені різними конструкторами класу String.

Не допускається явний виклик конструктора за замовчуванням - конструктора без параметрів. Немає також конструктора, якому як ар­гумент можна передати звичайну рядкову константу. Відповідні опе­ратори в тексті прикладу закоментовані.

Над рядками визначені наступні операції:

- присвоювання (=);

- дві операції перевірки еквівалентності (= =) і (!=);

- конкатенація або зчеплення рядків (+);

- узяття індексу ([ ]).

Бінарна операція "+" зчіплює два рядки, приписуючи другий рядок до кінця першого.

Можливість узяття індексу при роботі з рядками відбиває той факт, що рядок можна розглядати як масив й одержувати кожен його символ. Кожен символ рядка має тип char, доступний тільки для чи­тання але не для запису.

Приклад, у якому над рядками виконуються наведені операції:

string s1 = "ABC", s2 = "CDE";

string s3 = s1 + s2;

bool b1 = (s1!= s2);

char ch1 = s1[0];

ch2 = s2[0];

Console.WriteLine("\ns1={0}, s2={1}, b1={2}, ch1={3}, ch2={4}",

s1, s2, b1, ch1, ch2);

s2=s1;

b1 = (s1!= s2);

ch2 = s2[0];

Console.WriteLine("s1={0}, s2={1}, b1={2}, ch1={3}, ch2={4}",

s1, s2, b1, ch1, ch2);

У мові C# існують два види рядкових констант:

- звичайні константи, які представляють рядок символів, вкла­дений в лапки;

- @-константи, задані звичайною константою с попереднім знаком @.

У звичайних константах деякі символи можуть задаватися у вигляді escape-послідовностей. Для таких цілей використовується ком­бінація символів, що починається символом "\" - зворотна коса риска. Так. пари символів: "\n", "\t", "\\", "\"" задають відповідно символ пе­реходу на новий рядок, символ табуляції, сам символ зворотної косої риски, символ лапок, що вставляється в рядок, але не сигналізує про її закінчення. Комбінація " \xNNNN " задає символ, визначений шістнадцятковим кодом NNNN Іноді виникають незручності; наприклад, при задаванні констант, що визначають шлях до файла, доводиться щораз по­двоювати символ зворотної косої риски. Це одна із причин, які обумов­люють появу @-константи.

У @-константах всі символи трактуються в повній відповідності з їх зображенням. Тому шлях до файла краще задавати @-константою.

Статичні методи й властивості класу String наведені у таблиці 3.2

Таблиця 3.2 - Статичні методи й властивості класу String

Метод Опис
   
Empty Повертається порожній рядок. Властивість зі ста­тусом read only
Compare Порівняння двох рядків. Метод перевантажений. Реалізації методу дозволяють порівнювати як рядки, так і підрядки. При цьому можна враховувати або не враховувати регістр, особливості національного форматування дат, чисел і т.д.
CompareOrdinal Порівняння двох рядків. Метод перевантажений. Реалізації методу дозволяють порівнювати як рядки, так і підрядки. Порівнюються коди символів
Concat Конкатенація (зчеплення) рядків. Метод переванта­жений, допускає зчеплення довільного числа рядків
Copy Створюється копія рядка
Format Виконує форматування відповідно до заданих спе­цифікацій формату
Join Конкатенація масиву рядків у єдиний рядок. При конкатенації між елементами масиву вставляються роздільники. Операція, задана методом Join, є обер­неною до операції, заданої методом Split. Останній є динамічним методом й, використовуючи розділь­ники, здійснює поділ рядка на елементи

Динамічні методи класу String.

Методи класу String дозволяють виконувати вставку, видалення, заміну, пошук входження підрядка в рядок. Клас String успадковує методи класу Object частково їх перевизначаючи.

Методи, наведені у таблиці 3.3, дають досить повну картину можливостей, доступних при роботі з рядками в С#. Варто пам'ятати, що клас String є незмінним. Тому Replace, Insert та інші методи являють собою функції, що повертають новий рядок як результат і не змінюють рядок, що викликав метод.

Таблиця 3.3 - Динамічні методи і властивості класу string

Метод Опис
Insert Вставляє підрядок в задану позицію
Remove Видаляє підрядок в заданій позиції
Replace Заміняє підрядок в заданій позиції на новий підрядок
Substring Виділяє підрядок в заданій позиції
IndexOf, IndexOfAny, LastindexOf, LastindexOfAny Визначаються індекси першого і останнього входження заданого підрядка або будь-якого символу із заданого набору
StartsWith, EndsWith Повертається true або false залежно від того, починається або закінчується рядок зада­ним підрядком
PadLeft, PadRight Виконує набивання потрібною кількістю пробілів на початку і наприкінці рядка
Trim, TrimStart, TrimEnd Зворотні операції до методів Pad. Видаля­ються пробіли на початку і наприкінці рядка, або тільки з одного його кінця
ToCharArray Перетворення рядка в масив символів

 

3.5. Клас StringBuilder

 

Клас StringBuilder - побудовник рядків. Клас String не дозволяє змінювати існуючі об'єкти. Рядковий клас StringBuilder дозволяє ком­пенсувати цей недолік. Цей клас належить до змінюваних класів і його можна знайти в просторі імен System.Text.

Оголошення рядків. Конструктори класу StringBuilder.

Об'єкти цього класу оголошуються з явним викликом конструктора класу. Оскільки спеціальних констант цього типу не існує, то виклик конс­труктора для ініціалізації об'єкта необхідний. Конструктор класу пере­вантажений, і поряд з конструктором без параметрів, що створюють порожній рядок, є набір конструкторів, яким можна передати дві групи параметрів. Перша група дозволяє задати рядок або підрядок, значен­ням якого буде ініціалізуватися створюваний об'єкт класу StringBuilder. Друга група параметрів дозволяє задати розмір об'єкта - обсяг пам'яті, що відводиться даному екземпляру класу StringBuilder. Кожна із цих груп не є обов'язковою й може бути опущена. Прикладом може служити конструктор без параметрів, що створює об'єкт, ініціалізований поро­жнім рядком, і з деяким розміром, заданим за замовчуванням, значення якого залежить від реалізації. Приклад синтаксису конструкторів:

 

public StringBuilder (string str, int cap).

Параметр str задає рядок ініціалізації, cap - розмір об'єкта;

 

public StringBuilder (int curcap, int maxcap).

Параметри curcap й maxcap задають початковий і максималь­ний розмір об'єкта;

 

public StringBuilder (string str, Int start, int len, Int cap).

Параметри str, start, len задають рядок ініціалізації, cap – розмір об'єкта.

 

Для цього класу не можна використовувати просте присвоювання:
StringBuilder s="abc"; // Неправильної

 

У цьому випадку необхідно записати так:

StringBuilder s = new StringBuilder("abc"); // Правильно

 

Операції над рядками. Над рядками цього класу визначені практично ті ж операції з тією ж семантикою, що й над рядками класу String, однак, операція конкатенації (+) не визначена над рядками класу StringBuilder, її роль грає метод Append, що дописує новий рядок в кі­нець уже існуючого.

З рядком цього класу можна працювати як з масивом, але, на відміну від класу String, тут допускається не тільки читання окремого символу, але і його зміна.

 

Приклад

// Рядки класу StringBuilder. Операції над рядками

StringBuilder ss1 = new StringBuilder("ABC"),

ss2 = new StringBuilder("CDE");

StringBuilder ss3 = new StringBuilder();

ss3 = ss1.Append(ss2); // s3= s1+s2;

bool bs1 = (ss1 == ss3);

char chs1 = s1[0], chs2 = ss2[0];

Console.WriteLine("\nss1={0}, ss2={1}, bs1={2}, chs1={3}, chs2={4}",

ss1, ss2, bs1, chs1, chs2);

ss2 = ss1;

bs1 = (ss1!= ss2);

chs2 = ss2[0];

Console.WriteLine("ss1={0}, ss2={1}, bs1={2},chs1={3}, chs2={4}",

ss1, ss2, bs1, chs1, chs2);

StringBuilder ss = new StringBuilder("Zenon");

ss[0] = 'L';

Console.WriteLine(ss);

Цей приклад демонструє можливість виконання над рядками класу StringBuilder тих же операцій, що й над рядками класу String. У результаті присвоювання створюється додаткове посилання на об'єкт, операції перевірки на еквівалентність працюють зі значеннями рядків, а не з посиланнями на них. Конкатенацію можна замінити викликом методу Append. З'являється нова можливість – змінювати окремі сим­воли рядка. Для того, щоб ім'я класу StringBuilder стало доступним, у проект доданий рядок
using System.Text, що посилається на відповідний простір імен. Результати роботи наведені нижче:

 

ss1=ABCCDE, ss2=CDE, bs1=True, chs1=A, chs2=C

ss1=ABCCDE, ss2=ABCCDE, bs1=False,chs1=A, chs2=A

Lenon

 

Основні методи і властивості. У класу є основні методи, що дозволяють виконувати такі операції над рядком як вставка, видалення та заміна підрядків, але немає методів, подібних до пошуку входження, які можна виконувати над звичайними рядками. Технологія роботи звичайно така: конструюється рядок класу StringBuilder; виконуються операції, що вимагають зміни значення; отриманий рядок перетво­риться в рядок класу String; над цим рядком виконуються операції, що не вимагають зміни значення рядка. У класу StringBuilder немає статич­них методів. Всі його методи динамічні.

 

Основні методи класу StringBuilder:

- public StringBuilder Append (<об'єкт>). До рядка, який ви­кликав метод, приєднується рядок, отриманий з об'єкта, що переданий методу як параметр. Метод перевантажений і може приймати на вході об'єкти всіх простих типів, починаючи від char й bool до string й long. Оскільки об'єкти всіх цих типів мають метод ToString, завжди є мож­ливість перетворити об'єкт у рядок, який і приєднується до вихідного рядка. Як результат повертається посилання на об'єкт, що викликав метод. Оскільки повернене посилання нічому присвоювати не потрібно, то вірніше вважати, що метод змінює значення рядка;

- public StringBuilder Insert (int location,<обєкт>). Метод вставляє рядок, отриманий з об'єкта, у позицію, зазначену параметром location. Метод Append є частковим випадком методу Insert;

- public StringBuilder Remove (int start, int leri). Метод видаляє підрядок довжини lеn, що починається з позиції start;

- public StringBuilder Replace (string strl, string str2). Всі вхо­дження підрядка strl заміняються на рядок str2;

- public StringBuilder AppendFormat (<рядок форматів>, „об’єкти”). Метод є комбінацією методу Format класу String і методу Append. Рядок форматів, переданий методу, містить тільки специфіка­ції форматів. Відповідно до цих специфікацій знаходяться і форматуються об'єкти. Отримані в результаті форматування рядки приєдну­ються в кінець вихідного рядка.

Приклади використання основних властивостей і методів класу StringBuilder:

//Властивість Length. Повертає довжину рядка:

int k=s.Length;

 

//Метод Append. Додає рядок до існуючого:

StringBuilder sb1=new StringBuilder("Cogito ");

StringBuilder sb2=new StringBuilder("ergo ");

sb1.Append(s2);

sb1.Append("sum");

Console.WriteLine();

Console.WriteLine(sb1);

// Надрукується "Cogito ergo sum"

// Я мислю, значить я існую

 

//Метод Equals. Слугує для порівняння двох рядків. Повертає true або false.

if(sb1.Equals(sb2)) Console.WriteLine("Рядки рівні");

else Console.WriteLine("Рядки не рівні");

 

//Метод Insert. Вставляє символи в задану позицію (нумерація йде з нуля):

StringBuilder sb3=new StringBuilder("abcde");

sb3.Insert(2, "xyz");

Console.WriteLine(sb3); // Надрукується "abxyzcde"

 

//Метод Remove. Видаляє символи з рядка:

StringBuilder sb4=new StringBuilder("abcde"); sb4.Remove(1, 2);

Console.WriteLine(sb4); // Надрукується "ade"

 

Console.ReadKey();

Перший параметр в Remove визначає, з якої позиції видаляти (нумерація з нуля), другий - скільки символів видаляти.

 

Метод Replace. Заміняє символи:

StringBuilder sr = new StringBuilder("abcdeabcde");

sr.Replace("abc", "ZZZ");

Console.WriteLine(sr); // Надрукується "ZZZdeZZZde"

 

За винятком методу Remove, всі розглянуті методи є переван­таженими.

Ємність буфера. Кожен екземпляр рядка класу StringBuilder має буфер, у якому зберігається рядок. Обсяг буфера – його ємність – може мінятися в процесі роботи з рядком. Об'єкти класу мають дві характеристики ємності – поточну й максимальну. У процесі роботи поточна ємність змінюється в межах максимальної ємності. Якщо роз­мір рядка збільшується, то відповідно автоматично росте й поточна ємність. Якщо ж розмір рядка зменшується, то ємність буфера залиша­ється на тому ж рівні. Із цієї причини іноді правильно зменшувати єм­ність. Спроба зменшити ємність до величини, меншої довжини рядка, Веде ДС' помилки.

У класу StringBuilder є дві властивості та один метод, що доз­воляють аналізувати й керувати ємнісними властивостями буфера. Цими характеристиками можна керувати також ще на етапі створення об'єкта, – для цього є відповідний конструктор. Розглянемо властивості і метод класу, пов'язані з ємністю буфера:

- властивість Capacity – повертає або встановлює поточну єм­ність буфера;

- властивість MaxCapaclty – повертає максимальну ємність бу­фера (максимальна кількість символів, які можна записати в об'єкт типу StringBuilder).

 

Методint EnsureCapacity (int capacity) – дозволяє зменшити єм­ність буфера. Метод намагається спочатку встановити ємність, задану параметром capacity; якщо це значення менше розміру збереженого рядка, то ємність установлюється такою, щоб гарантувати розміщення рядка. Це число повертається як результат роботи методу.

 

 


Дата добавления: 2015-10-02; просмотров: 59 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Горизонтальная работа или работа с Малым Арканом| Рассылается: ТЧ, ТЧЗЭмфбв, ТЧэксп

mybiblioteka.su - 2015-2024 год. (0.022 сек.)