Символьный тип char предназначен для хранения символов в кодировке Unicode. Способы представления символов рассматривались в разделе «Литералы» (см. с. 26). Символьный тип относится к встроенным типам данных С# и соответствует стандартному классу Char библиотеки.NET из пространства имен System. В этом классе определены статические методы, позволяющие задать вид и категорию символа, а также преобразовать символ в верхний или нижний регистр и в число. Основные методы приведены в табл. 6.2.
Таблица 6.2. Основные методы класса System.Char
Метод Описание
GetNumericValue Возвращает числовое значение символа, если он является цифрой, и -1 в
противном случае
GetUnicodeCategory Возвращает категорию Unicode-символа Bсe Unicode-символы
разделены на категории, например, десятичные цифры (Decimal
DigitNumber), римские цифры (LetterNumber), разделители строк
(LineSeparator), буквы в ниж нем регистре (LowercaseLetter) и т. д.
IsControl Возвращает true, если символ является управляющим
IsDigit Возвращает true, если символ является десятичной цифрой
IsLetter Возвращает true, если символ является буквой
|
|
IsLetterOrDigit Возвращает true, если символ является буквой или цифрой
IsLower Возвращает true, если символ задан в нижнем регистре
Is Number Возвращает true, если символ является числом (десятичным
или шестнадцатеричным)
IsPunctuation Возвращает true, если символ является знаком препинания
IsSeparator Возвращает true, если символ является разделителем
IsUpper Возвращает true, если символ записан в верхнем регистре
IsWhiteSpace Возвращает true, если символ является пробельным (пробел,
перевод строки и возврат каретки)
Parse Преобразует строку в символ (строка должна состоять из одного
символа)
ToLower Преобразует символ в нижний регистр
ToUpper Преобразует символ в верхний регистр
MaxValue, MinValue Возвращают символы с максимальным и минимальным кодами (эти символы не имеют видимого представления)
В листинге 6.6 продемонстрировано использование этих методов.
Листинг 6.6. Использование методов класса System.Char
using System;
namespace ConsoleApplication1
{
class Class1
{
static void Main()
{
try
{
char b = 'В', с = '\x63', d = '\u0032'; // 1
Console.WriteLine("{0} {1} {2}", b, с, d);
Console.WriteLine("{0} {1} {2}",
char.ToLower(b), char.ToUpper(c), char.GetNumericValue(d));
char a;
do // 2
{
Console.Write("Введите символ: ");
a = char.Parse(Console.ReadLine());
Console.WriteLine("Введен символ {0}, его код - {1}", a, (int)a);
if (char.IsLetter(a))
Console.WriteLine("Буква");
if (char.IsUpper(a))
Console.WriteLine("Bepxний per.");
if (char.IsLower(a))
Console.WriteLine("Нижний per.");
if (char.IsControl(a))
Console.WriteLine("Управляющий");
if (char.IsNumber(a))
Console.WriteLine("Число");
if (char.IsPunctuation(a))
Console.WriteLine("Paздeлитeль");
}
while (a!= 'q');
}
catch
{
Console.WriteLine("Возникло исключение");
return;
}
}
}
}
В операторе 1 описаны три символьных переменных. Они инициализируются символьными литералами в различных формах представления. Далее выполняются вывод и преобразование символов.
|
|
В цикле 2 анализируется вводимый с клавиатуры символ. Можно вводить и управляющие символы, используя сочетание клавиши Ctrl с латинскими буквами. При вводе использован метод Parse, преобразующий строку, которая должна содержать единственный символ, в символ типа char. Поскольку вводится строка, ввод каждого символа следует завершать нажатием клавиши Enter. Цикл выполняется, пока пользователь не введет символ q.
Вывод символа сопровождается его кодом в десятичном виде1. Для вывода кода используется явное преобразование к целому типу. Явное преобразование из символов в строки и обратно в С# не существует, неявным же образом любой объект, в том числе и символ, может быть преобразован в строку2, например:
string s = 'к' + 'о' + 'т'; // результат - строка "кот"
При вводе и преобразовании могут возникать исключительные ситуации, например, если пользователь введет пустую строку. Для «мягкого» завершения программы предусмотрена обработка исключений.
Обратите внимание на коды русских букв: как далеко от латинских они оказались в кодировке Unicode! Об этом рассказывалось в разделе «Простейший ввод-вывод» (см. с. 59).