Знайомство з Microsoft. NET Framework. Частина 5. Клас System.String, Інтеграція додатків і даних, Бази даних, статті

Частина 4

Зміст



Ми продовжуємо знайомство з Microsoft. NET Framework і бібліотекою класів. NET Framework Class Library. У цій статті ми розглянемо рядки і клас System.String, а також ознайомимося з деякими способами форматування, доступними в бібліотеці класів. NET Framework Class Library.


Рядки


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


Після того як екземпляр класу String створений, він не може бути змінений – всі методи класу, які змінюють вміст стоки, повертають новий екземпляр даного класу. Клас StringBuilder, що знаходиться в просторі імен System.Text, використовується для створення рядків, вміст яких може бути модифіковано. У Microsoft. NET перший символ рядка має нульовий індекс.


Клас String реалізує інтерфейси IComparable, ICloneable, IConvertible і IEnumerable.


Ми вже знайомі з інтерфейсом IEnumerable – ми розглянули його в попередній статті даного циклу. Інтерфейс IComparable містить оголошення методу CompareTo, який реалізують даний інтерфейс класи використовують для того, щоб забезпечити підтримку сортування екземплярів класу. Інтерфейс ICloneable задає метод Clone, який використовується в тих випадках, коли класу необхідно стежити за створенням копій примірників даного класу. Інтерфейс IConvertible задає методи, які використовуються при перетворенні між типами, підтримуваними Common Language Runtime, та іншими типами.


Клас String містить дві властивості: властивість Chars (Integer), яке повертає символ у зазначеній позиції, і властивість Length, що повертає число символів в рядку. Нижче показаний приклад використання цих властивостей, в якому ми виводимо вміст рядка по одному символу.



“—————————————
” .NET String Demo
“—————————————

Imports System
Imports System.String

Module Module1

Sub Main()

Dim Str As String
Dim I As Integer

Str = “Microsoft .NET”

While I <= Str.Length – 1
Console.WriteLine(Str.Chars(I))
I += 1
End While

End Sub

End Module


Метод IndexOf (Char) використовується для знаходження першої копії підрядка в цьому рядку. Він повертає початкову позицію підрядка, якщо вона знайдена, або -1 – в іншому випадку. Перевантажені версії методу IndexOf дозволяють вказувати параметри типу Char, String або масив елементів Char. Нижче показано, як використовувати даний метод:



“—————————————
” .NET Strings Demo
“—————————————

Imports System
Imports System.String

Module Module1

Sub Main()

Dim Str As String
Dim Ch As Char
Dim Chars As Char() = {“.”, “N”, “E”, “T”}
Str = “Microsoft .NET”
Ch = “.”
Console.WriteLine(Str.IndexOf(“.NET”)) “returns 10
Console.WriteLine(Str.IndexOf(Ch)) “returns 10
Console.WriteLine(Str.IndexOf(Chars)) “returns 10

End Sub

End Module


Метод IndexOf () має два опціональних параметра, здатних обмежити пошук за рахунок вказівки початкової і кінцевої позиції в рядку, в якій виконується пошук.


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


Для зміни регістру символів у рядку – приведення символів до верхнього або нижнього регістру – використовуються методи ToUpper () і ToLower () відповідно.


Для порівняння двох рядків ми використовуємо одну з перевантажених версій методу Compare. Цей метод повертає 0, якщо порівнювані рядки ідентичні, негативне число, якщо перший рядок менше другої, або позитивне число, якщо перший рядок більше другий. За замовчуванням порівняння рядків виконується з урахуванням регістра символів. Для того щоб регістр символів ігнорувався при порівнянні рядків, третій опціональний параметр методу Compare повинен мати значення True.


Наприклад, два наступних порівняння повертають різні результати:



Str = “Microsoft .NET”
Console.WriteLine(Str.Compare(Str.ToUpper, Str.ToLower)) ‘ 1
Console.WriteLine (Str.Compare (Str.ToUpper, Str.ToLower, True)) '0


Для перетворення рядка в масив підрядків використовується метод Split (ParamArray Char ()). При виклику цього методу вказується символ, який вважається символом, що розділяє підрядка, – це може бути пробіл, кома і т.п. У наступному прикладі показано використання методу Split:



“—————————————
” .NET Strings Demo
“—————————————

Imports System
Imports System.String

Module Module1

Sub Main()

Dim Str As String
Dim Words() As String
Dim I As Integer

Str = “Microsoft .NET Platform”
Words = Str.Split(” “)
For I = 0 To Words.GetUpperBound(0)
Console.WriteLine(I & ” : ” & Words(I))
Next

End Sub

End Module


Метод Join (String, String ()) служить для об'єднання елементів масиву в рядок.


Після того як ми розглянули основні методи класу String, давайте коротко ознайомимося з іншими методами, реалізованими в даному класі:



Відзначимо, що в наведеному вище прикладі ми використовували властивість Length класу String в рядку, заданої літералів – це ще один спосіб використання класу String без створення екземпляра даного класу.


Простір імен System.Text


Простір імен System.Text містить класи, які представляють собою різні кодування символів, а також надають допоміжні класи для маніпуляції об'єктами типу String, включаючи операції форматування.


Клас StringBuilder може використовуватися спільно з класом String для маніпуляції рядками. Цей клас корисний у тих випадках, коли нам потрібно модифікувати вміст екземпляра класу String – вставити, замінити або видалити символи – без створення нового рядка. Для виконання необхідної операції ми використовуємо методи Insert, Replace і Remove, що надаються класом StringBuilder. Доступ до окремих символів у рядку можливий через властивість Chars, яке забезпечує посимвольно маніпуляцію рядками.


Простір імен System.Text також містить ряд перетворювачів – класів, які реалізують різні кодування символів і використовуються для перетворення між ними, включаючи кодування ASCII (клас ASCIIEncoding), UTF-7 (клас UTF7Encoding), UTF-8 (клас UTF8Encoding), Unicode (клас UnicodeEncoding) і кодові сторінки Windows:



Всі вищеперелічені класи успадковують класу Encoding, який задає базову функціональність цих класів.



Після того як ми ознайомилися з масивами, колекціями і рядками, давайте розглянемо способи форматування, доступні в бібліотеці класів.



Форматування


З розповіді про клас Object ми вже знаємо, що кожен клас в бібліотеці класів. NET Framework Class Library містить метод ToString (). Реалізація цього методу залежить від конкретного класу, але для типів зі значеннями, особливо для примітивних типів, ми можемо використовувати даний метод для виведення значень, що зберігаються в змінних того чи іншого типу. У наступних розділах ми розглянемо, як використовувати різні специфікатори формату для того, щоб сформатувати значення як десяткові, експоненціальні, шістнадцяткові і т.п.



Форматування за замовчуванням


За замовчуванням, коли ми використовуємо метод Console.WriteLine () або будь-який інший метод, що перетворює значення на тип String, реальне перетворення виконує метод ToString (). Наприклад, наступний код:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()

Dim Amount As Decimal = 123.45
Console.WriteLine(Amount)

End Sub

End Module


виведе дані, як і очікується, – 123.45. Для простого відображення даних цього цілком достатньо, але якщо ми захочемо, наприклад, відобразити значення змінної Amount як «грошове» значення (currency) або в будь-якому іншому форматі, то нам потрібні більш потужні засоби. І тут нам на допомогу приходять спеціальні специфікатори форматів. Ми розглянемо ці специфікатори нижче.



Форматування типу Currency


Для форматування значення як «грошового», ми використовуємо специфікатор C (або c), як показано в наступному прикладі:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()

Dim Amount As Decimal = 123.45
Dim Saldo As Decimal = 94.20

Console.WriteLine(“Amount: {0:C}, Saldo: {1:C}”, Amount, Saldo)
End Sub

End Module


Наведений вище код виводить: Amount: $ 123.45, Saldo: $ 94.20. Якщо тепер ми змінимо значення країни:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System.Globalization
Imports System.Threading

Module Formatting

Sub Main()
Dim Cult As CultureInfo
Dim Cults() As String = {“FR-FR”, “EN-GB”, “FR-CH”}
Dim I As Integer

Dim Amount As Decimal = 123.45
Dim Saldo As Decimal = 94.2

For I = 0 To Cults.GetUpperBound(0)

Cult = New CultureInfo(Cults(I))
Thread.CurrentThread.CurrentCulture = Cult
Console.WriteLine(“Amount: {0:C}, Saldo: {1:C}”, _
Amount, Saldo)
Cult = Nothing

Next

End Sub

End Module


то ми отримаємо значення, специфічні для тієї чи іншої країни, тобто включають символ тієї чи іншої валюти: євро для Франції, фунти стерлінгів для Великобританії і швейцарські франки для Швейцарії:



Форматування типу Decimal


Цей тип форматування вказується специфікатором D (або d). Крім цього можна вказати точність перетворення – мінімальне число відображуваних цифр. Наприклад, наступний код:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“D”, “D4”, “D6”}
Dim I As Integer

Dim Value As Integer = 123

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: {0:” & Formats(I) & “}”, Value)
Next

End Sub

End Module


виводить такі дані:


Форматування типу Exponential


Ми використовуємо цей формат (який також називається «інженерним» форматом; специфікатор E або e) для перетворення значень в експоненціальне подання. Ми також можемо вказати точність перетворення – Число символів після десяткової точки. Так, наступний код:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“E”, “E2”, “E3”}
Dim I As Integer

Dim Value As Integer = 123456

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: {0:” & Formats(I) & “}”, Value)
Next

End Sub

End Module


виводить наступні дані:



Dim Formats() As String = {“e”, “e2”, “e3”}


що призведе до наступного результату:


Форматування типу Fixed-point


Форматування чисел з фіксованою крапкою (специфікатор F або f) використовується для перетворення десяткових чисел шляхом додавання вказаного числа нулів (за замовчуванням два) після десяткової точки. Зокрема, код:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“F”, “F3”, “F5”}
Dim I As Integer

Dim Value As Integer = 123

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: {0:” & Formats(I) & “}”, Value)
Next

End Sub

End Module


виводить такі дані:



Форматування типу General


Цей тип форматування (специфікатор G або g) використовується для перетворення значення або у формат з фіксованою точкою, або в «науковий» формат. Максимальна точність для типу Double – 17, а точність за замовчуванням – 15. Точність можна вказувати разом зі специфікатором. Наприклад, код:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“G”, “G3”, “G17”}
Dim I As Integer

Dim Value As Double = 123456789123456789

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: {0:” & Formats(I) & “}”, Value)
Next

End Sub

End Module


виводить наступні дані:


Форматування типу Number


Даний формат (специфікатор N або n) використовується для перетворення значення в форму [-] d, ddd, ddd.dd. Наступний приклад показує, як виконується це перетворення:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“N”, “N3”, “N5”}
Dim I As Integer

Dim Value As Integer = 123456

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: {0:” & Formats(I) & “}”, Value)
Next

End Sub

End Module


Форматування типу Percent


Ми використовуємо даний формат (специфікатор P або p) для подання числового значення у вигляді відсотка. Наступний приклад демонструє застосування цього типу форматування:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“P”, “P3”, “P5”}
Dim I As Integer

Dim Value As Decimal = 0.12345

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: {0:” & Formats(I) & “}”, Value)
Next

End Sub

End Module


Форматування типу Round-trip


Цей формат (специфікатор R або r) використовується при необхідності гарантії того, що перетворене число може бути перетворено назад в первісну величину.


Форматування типу Hexadecimal


Даний формат (специфікатор X або x) застосовується в тих випадках, коли необхідно шістнадцяткове представлення значення. Використання даного типу форматування показано на наступному прикладі:



“—————————————
” .NET Formatting Demo
“—————————————


Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“X”, “X3”, “X5”}
Dim I As Integer

Dim Value As Byte = 128

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: 0x{0:” & Formats(I) & “}”, Value)
Next

Console.WriteLine()

End Sub

End Module


Форматування типу Picture Numeric


Ми вже використали шаблони при розгляді різних специфікатором форматів. Вони мають форму {0: xy}, де x – один з існуючих специфікатором, а y – покажчик точності. Крім простих шаблонів ми можемо використовувати і більш комплексні. Деякі з таких шаблонів показані в наступному прикладі:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {” {0:0.##}”, ” {0:##.###}”, _
“{0:%#.##}”, “{0:##.##E+0}”, “{0:{{##.##}}}”, _
“{0:###.###}”}

Dim I As Integer
Dim Value As Double = 1.23456

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: ” & Formats(I), Value)
Next

End Sub

End Module


Ми можемо використовувати специфікатори форматів G, F, D і X (або їх еквіваленти в нижньому регістрі) для перетворення імен членів перерахувань до їх рядкові еквіваленти. Наступний приклад показує, як це зробити:



“—————————————
” .NET Formatting Demo
“—————————————

Imports System

Module Module1

Sub Main()
Dim Formats() As String = {“{0:G}”, “{0:F}”, “{0:D}”, “{0:X}”}

Dim I As Integer
Dim Value As FileAttributes = FileAttributes.Directory

For I = 0 To Formats.GetUpperBound(0)
Console.WriteLine(“Value: ” & Formats(I), Value)
Next

End Sub

End Module


Примітка. У бібліотеці класів Microsoft. NET Framework Library також підтримуються різні опції форматування значень дати і часу. Ми ознайомимося з ними в одній з наших наступних статей.



Висновок


У цій частині статті ми розглянули використання рядків, класів System.String, System.Text. StringBuilder, а також розповіли про використання різних специфікатором форматування.


Наступний етап в освоєнні бібліотеки класів Microsoft. NET Framework Library – потоки, підтримка файлової системи та мережеві функції. Про це ми поговоримо в Частина 6


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*