Студопедия

Главная страница Случайная страница

Разделы сайта

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






Клас char






В C# є символьний клас Char, заснований на класі System.Char і що використає двобайтне кодування Unicode подання символів. Для цього типу в мові визначені символьні константи - символьні літерали. Константу можна задавати:

· символом, укладеним в одинарні лапки;

· escape-послідовністю, що задає код символу;

· Unicode-послідовністю, що задає Unicode-код символу.

От кілька прикладів оголошення символьних змінних і роботи з ними:

public void TestChar(){ char ch1='A', ch2 ='\x5A', ch3='\u0058'; char ch = new Char(); int code; string s; ch = ch1; //перетворення символьного типу в тип int code = ch; ch1=(char) (code +1); //перетворення символьного типу в рядок //s = ch; s = ch1.ToString()+ch2.ToString()+ch3.ToString(); Console.WriteLine(" s= {0}, ch= {1}, code = {2}", s, ch, code); }//TestChar

Три символьні змінні ініціалізовані константи, значення яких задані трьома різними способами. Змінна ch оголошується в об'єктному стилі, використовуючи new і виклик конструктора класу. Тип char, як і всі типи C#, є класом. Цей клас успадковує властивості й методи класу Object і має велику кількість власних методів.

Чи існують перетворення між класом char й іншими класами? Явні або неявні перетворення між класами char й string відсутні, але, завдяки методу ToString, змінні типу char стандартним чином перетворяться в тип string. Існують неявні перетворення типу char у цілочисельні типи, починаючи з типу ushort. Зворотні перетворення цілочисельних типів у тип char також існують, але вони вже явні.

В результаті роботи процедури TestChar рядок s, отримана злиттям трьох символів, перетворених у рядки, має значення BZX, змінна ch дорівнює A, а її код - змінна code - 65.

Не раз відзначалося, що семантика присвоювання справедлива при виклику методів і заміні формальних аргументів на фактичні. Приведемо дві процедури, що виконують взаємо-зворотні операції - одержання за кодом символу й одержання символу за його кодом:

public int SayCode(char sym){ return (sym); }//SayCode public char SaySym(object code){ return ((char)((int)code)); }// SaySym

Як бачите, у першій процедурі перетворення до цілого типу виконується неявно. У другий - перетворення явне. Заради універсальності вона злегка ускладнена. Формальний параметр має тип Object, що дозволяє передавати їй як аргумент код, заданий будь-яким цілочисельним типом. Платою за це є необхідність виконувати два явних перетворення.

Таблиця 15.1. Статичні методи й властивості класу Char

Метод Опис
GetNumericValue Повертає чисельне значення символу, якщо він є цифрою, і (-1) у противному випадку
GetUnicodeCategory Всі символи розділені на категорії. Метод повертає Unicode категорію символу. Нижче наведений приклад
IsControl Повертає true, якщо символ є керуючим
IsDigit Повертає true, якщо символ є десятковою цифрою
IsLetter Повертає true, якщо символ є буквою
IsLetterOrDigit Повертає true, якщо символ є буквою або цифрою
IsLower Повертає true, якщо символ заданий у нижньому регістрі
IsNumber Повертає true, якщо символ є числом (десяткової або шіснадцятковою цифрою)
IsPunctuation Повертає true, якщо символ є розділовим знаком
IsSeparator Повертає true, якщо символ є роздільником
IsSurrogate Деякі символи Unicode з кодом в інтервалі [0x1000, 0x10FFF] представляються двома 16-бітними " сурогатними" символами. Метод повертає true, якщо символ є сурогатним
IsUpper Повертає true, якщо символ заданий у верхньому регістрі
IsWhiteSpace Повертає true, якщо символ є " білим пробілом". До білих пробілів, крім пробілу, ставляться й інші символи, наприклад, символ кінця рядка й символ перекладу каретки
Parse Перетворить рядок у символ. Природно, рядок повинен складатися з одного символу, інакше виникне помилка
ToLower Приводить символ до нижнього регістра
ToUpper Приводить символ до верхнього регістра
MaxValue, MinValue Властивості, що повертають символи з максимальним і мінімальним кодом. Символи, що повертають, не мають видимого образа  

 

Клас Char, як і всі класи в C#, успадковує властивості й методи батьківського класу Object. Але в нього є й власні методи й властивості, і їх чимало. Зведення цих методів наведені в таблиці 1.

Більшість статичних методів перевантажені. Вони можуть застосовуватися як до окремого символу, так і до рядка, для якого вказується номер символу для застосування методу. Основну групу становлять методи Is, украй корисні при розборі рядка. Приведемо приклади, у яких використаються багато хто з перерахованих методів:

public void TestCharMethods(){ Console.WriteLine(" Статичні методи класу char: "); char ch='a', ch1='1', lim ='; ', chc='\x'; double d1, d2; d1=char.GetNumericValue(ch); d2=char.GetNumericValue(ch1); Console.WriteLine(" Метод GetNumericValue: "); Console.WriteLine(" sym 'a' - value {0}", d1); Console.WriteLine(" sym '1' - value {0}", d2); System.Globalization.UnicodeCategory cat1, cat2; cat1 =char.GetUnicodeCategory(ch1); cat2 =char.GetUnicodeCategory(lim); Console.WriteLine(" Метод GetUnicodeCategory: "); Console.WriteLine(" sym '1' - category {0}", cat1); Console.WriteLine(" sym '; ' - category {0}", cat2); Console.WriteLine(" Метод IsControl: "); Console.WriteLine(" sym '\x' - IsControl - {0}", char.IsControl(chc)); Console.WriteLine(" sym '; ' - IsControl - {0}", char.IsControl(lim)); Console.WriteLine(" Метод IsSeparator: "); Console.WriteLine(" sym ' ' - IsSeparator - {0}", char.IsSeparator(' ')); Console.WriteLine(" sym '; ' - IsSeparator - {0}", char.IsSeparator(lim)); Console.WriteLine(" Метод IsSurrogate: "); Console.WriteLine(" sym '\u10FF' - IsSurrogate - {0}", char.IsSurrogate('\u10FF')); Console.WriteLine(" sym '\\' - IsSurrogate - {0}", char.IsSurrogate('\\')); string str = " \U00010F00"; //Символи Unicode в інтервалі [0x10000, 0x10FFF] //представляються двома 16-бітними сурогатними символами Console.WriteLine(" str = {0}, str[0] = {1}", str, str[0]); Console.WriteLine(" str[0] IsSurrogate - {0}", char.IsSurrogate(str, 0)); Console.WriteLine(" Метод IsWhiteSpace: "); str =" пробіли, пробіли! " + " \x" + " \x" + " Усюди пробіли! "; Console.WriteLine(" sym '\x ' - IsWhiteSpace - {0}", char.IsWhiteSpace('\x')); Console.WriteLine(" str: {0}", str); Console.WriteLine(" й її пробіли - символ 8 {0}, символ 17 {1}", char.IsWhiteSpace(str, 8), char.IsWhiteSpace(str, 17)); Console.WriteLine(" Метод Parse: "); str=" A"; ch = char.Parse(str); Console.WriteLine(" str: {0} char: {1}", str, ch); Console.WriteLine(" Мінімальне й максимальне значення: {0}, {1}", char.MinValue.ToString(), char.MaxValue.ToString()); Console.WriteLine(" Їхні коди: {0}, {1}", SayCode(char.MinValue), SayCode(char.MaxValue)); }//TestCharMethods

Результати консольного виводу, породженого виконанням методу, зображені на мал. 15.1.

Рис. 15.1 Виклики статичних методів класу char

Крім статичних методів, у класу Char є й динамічні. Більшість із них - це методи батьківського класу Object, успадковані й перепевні в класі Char. Із власних динамічних методів варто відзначити метод CompareTo, що дозволяє проводити порівняння символів. Він відрізняється від методу Equal тим, що для незбіжних символів видає " відстань" між символами відповідно до їх упорядкованості в кодуванні Unicode. Приведу приклад:

public void testCompareChars(){ char ch1, ch2; int dif; Console.WriteLine(" Метод CompareTo"); ch1='A'; ch2= 'Z'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='а'; ch2= 'А'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='Я'; ch2= 'А'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='A'; ch2= 'A'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='А'; ch2= 'A'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); ch1='Е'; ch2= 'А'; dif = ch1.CompareTo(ch2); Console.WriteLine(" Відстань між символами {0}, {1} = {2}", ch1, ch2, dif); }//TestCompareChars

Результати порівняння зображені на мал. 2.

Рис. 15.2. Порівняння символів






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.