Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
53
Добавлен:
27.04.2015
Размер:
825.73 Кб
Скачать

Тема 4.9. Обработка строковых данных

Перейти кТеме 4.8 Теме 4.10 Огл.

4.9.1. Основные понятия 4.9.2. Объявление и инициализация строк

4.9.3. Средства VВ для ввода/вывода и отображения строк 4.9.4. Средства VB и VS для обработки строк

4.9.5. Работа с кодами ASCII

4.9.6. Задачи для самостоятельного решения по теме «Обработка строковых данных» 4.9.7. Тестовые задания по теме «Обработка строковых данных»

4.9.1. Основные понятия

Управление электронными документами во многих сферах деятельности является очень важной задачей. В связи с этим VB предоставляет различные механизмы как для работы с текстовыми документами, так и для обработки их содержимого. Наиболее общим типом документов является неформатированный текстовый файл, который состоит из слов, букв, цифр и специальных символов различного назначения.

Известно, что наряду с числовыми данными, компьютер может хранить и обрабатывать текстовую информацию. Это, например, тексты документов MS Word, текстовые поля форм VS, текстовые поля баз данных и др. Кроме того, обмен текстовой информацией между пользователем и приложением – важнейшая часть пользовательского интерфейса VS.

В VB строковые данные можно использовать или как элементы базового типа, или как экземпляры класса String. Причем каждый символ текста кодируется двух-байтным кодом Unicode, а стандартные символы ASCII остаются в традиционном диапазоне значений от 0 до 127, и, поэтому значение второго байта каждого символа Unicode в этом диапазоне устанавливается в 0.

Необходимо обратить внимание, что при любой модификации строки в VB .NET создается новый экземпляр строки, а частая модификация строки требует больших затрат ресурсов. Поэтому в VB .NET создан класс StringBuilder для выполнения, например, таких операций, как выборка данных из буфера и объединение их в строковой переменной, который позволяет оптимизировать работу со строками.

При обработке текстовой информации в VB можно производить различные операции, например, такие, как:

соединение (конкатенация) строк текста; сортировка строк текста; поиск определённых символов;

составление новых строк из частей уже имеющихся строк; формирование строки повторением другой строки n раз;

извлечение подстрок из более длинных строк; преобразование регистра символов строки;

сравнение строк с учетом регистра символов; сравнение строк без учета регистра символов;

преобразование строк в массив символов и обратные преобразования; подсчет символов; подсчет слов;

удаление непечатаемых символов; замена подстрок; вставка символа или строки; форматирование чисел в виде строк и др.

Тема 4.9.Обработка строковых данных

Страница235

4.9.2. Объявление и инициализация строк

Строковые переменные являются данными типа String и должны быть объявлены следующим образом:

Dim ИмяПеременной As String

Присвоение значений переменным строкового типа, как и переменным других типов, производится либо при объявлении переменной (при инициализации), либо оператором присваивания:

Dim ИмяПеременной As String = "строка символов" ИмяПеременной = СтроковоеВыражение

СтроковоеВыражение представляет собой:

строковый литерал – последовательность символов, заключенных в двойные кавычки;

строковая именованная константа, либо переменная строкового типа;

результат операции с участием строковых выражений;

результат любого допустимого выражения, преобразованного в строковый тип.

Строковая именованная константа должна быть обязательно инициализирована при объявлении:

Const НазваниеФирмы = "ГОУ ""МТУСИ"""

Обратите внимание, что если в строку нужно включить двойную кавычку, то после неё ставят ещё одну двойную кавычку.

Как известно, во избежание неконтролируемых неявных преобразований типов, всегда необходимо использовать режим строгого контроля типов, включаемый оператором Option Strict On. Причем для явного преобразования любого числового типа в строку можно использовать функцию CStr ( ) или метод To String( )класса Convert:

Dim Число As Double

Число = 3.14

Dim Строка1 As String = Convert.ToString(Число)

Dim Строка2 As String = CStr(Число)

Напомним также, что обратное преобразование из строки в число можно выполнить с помощью функции Val( ), CDbl( ), CInt( )и т.д., или с помощью соответствующих методов класса Convert – ToDouble( ), ToInt32( ) и т.д.

В п.п. 4.2.4 Темы 4.2 настоящего пособия подробно были изложены средства явных преобразований. Здесь еще раз обращаем внимание на то, что в числовой переменной разделителем целой и дробной части является точка, а в строке – запятая. Если пользователь вместо запятой использует точку в качестве разделителя, при выполнении программы произойдёт ошибка. Это относится ко всем вышеперечисленным функциям и методам, кроме функции Val( ), которая в качестве разделителя целой и дробной частей принимает только точку. Во избежание ошибок необходимо перед преобразованием в число проверять разделитель целой и дробной части.

4.9.3. Средства VB для ввода/вывода и отображения строк

Простейшим способом отображения в программе текстовых строк, вводимых с клавиатуры, а, следовательно, и из текстового файла, является использование объекта текстового поля. Как известно, объекты текстового поля могут иметь любые размеры. Если содержимое текстовой информации не помещается в текстовое поле, к текстовому полю можно добавить полосы прокрутки так, чтобы пользователь смог увидеть весь текст.

Для ввода строковых данных и отображения их на форме могут использоваться

Тема 4.9.Обработка строковых данных

Страница236

известные элементы управления TextBox, ListBox, ComboBox. Причем для отображения нескольких строк в текстовом поле, свойство Multiline устанавливается в значение True. Для отображения строковой информации на форме, не подлежащей редактированию пользователем, используется элемент управления Label. Отображать текстовую информацию в качестве заголовков можно также на кнопках, в заголовке окна формы и т.д. Для отображения используется свойство Text этих элементов. Например:

Label1.Text="Введите место рождения"

Для того, чтобы текст оставался до определённого времени невидимым, его свойству Visible первоначально надо присвоить значение False, а затем, когда нужно это поле отобразить, свойству Visible присваивается значение True.

Напомним, что типы данных в VB являются классами и управляются из пространства имен System, а классы, в свою очередь, состоят из методов и свойств.

Значение свойства Text всех элементов управления имеет тип String. Поэтому для записи числового значения в свойство Text элемента управления необходимо произвести явное преобразование в тип String, например методом ToString соответствующего типа данных или соответствующей встроенной функцией CStr( ):

Dim ЧислоДней As Integer = 31

Label1.Text= ЧислоДней.ToString

Label2.Text = CStr(ЧислоДней)

Здесь переменная ЧислоДней обрабатывается методом ToString( ), который принадлежит классу Integer или функцией CStr( ). Для явного преобразования можно также воспользоваться методом класса Convert:

Label1.Text = Convert.ToString(ЧислоДней)

При включенном режиме строгого контроля типов Option Strict On отсутствие явного преобразования вызовет ошибку периода компиляции.

Значение, вводимое из поля Text элементов TextBox, ListBox, ComboBox в переменные числовых типов также надо преобразовывать из строки в число. Для этого существуют соответствующие функции VB и методы класса Convert:

Dim ЧислоДней As Integer=Convert.ToInt32(TextBox1.Text)

Dim Длина As Double=Convert.ToDouble(TextBox2.Text)

Dim Скорость As Single= CSng(TextBox3.Text)

4.9.4.Средства VB и VS для обработки строк

ВVB существует всего одна операция для работы со строками – конкатенация (объединение строк). Она объединяет несколько строк в одну:

ТекстоваяПеременная=Строка1 & Строка2 & …

Строка1, Строка2… - это строковые выражения, состоящие из строковых переменных, строковых констант, строковых литералов и свойств объектов Text. Например:

Label1.Text = "Cтудент " & TextBox1.Text & " сдал " & _

СданоЛабораторок(ИндексСтудента) & " лабораторных работ"

Как известно, VB является полностью объектно-ориентированным языком. Это в частности сказывается в том, что строки в VB являются не базовыми типами, подобными числовым типам, а объектами класса String. Этот класс является общим для всех языков платформы .NET Framework. Обращение к строкам производится по тем же правилам, что

и к свойствам и методам элементов управления. Например, TextBox1.Text

возвращает

Тема 4.9.Обработка строковых данных

Страница237

свойство Text объекта TextBox1, а метод ListBox1.Items.Add("Февраль") добавляет строку с текстом Февраль в список ListBox1.

Обращение к свойствам и методам объекта производится по правилу точечной нотации:

ИмяОбъекта.ИмяСвойства ИмяОбъекта.ИмяМетода()

Обращение к функциям производится стандартным способом:

ИмяФункции(СписокФактическихПараметров).

К наиболее частым действиям со строками, кроме конкатенации, можно отнести следующие действия:

выделение части строки;

поиск в строке по образцу;

замена по образцу;

изменение регистра символов (большие – маленькие буквы);

удаление лишних пробелов;

добавление выравнивающих полей.

Выделение части строки. Среди нескольких существующих способов выделения части строки разработчики рекомендуют метод Substring(). Этот метод возвращает часть строки заданной длины, начиная с указанной позиции в строке. Синтаксис обращения следующий:

ИмяОбъекта.Substring(ИндексСтартСимСтроке, КолСимволов).

Как известно, индекс всегда начинается с 0.

В следующем примере выделяется один символ строки, начиная с пятого по счёту:

Dim S As String = "Крокодил"

Dim ПятыйСимволСтроки As String = S.Substring(4,1)‘ПятыйСимволСтроки=”о"

Если количество возвращаемых символов не указано, возвращается часть строки от стартового символа до конца строки.

Для выделения последних символов строки необходимо знать размер строки, который возвращает свойство Length:

 

Dim

S

As

String = "Крокодил"

 

 

Dim

L

As

Integer = S.Length 'L=8

 

Существует также специальный метод Right(), возвращающий последние символы. Для использования этого метода размер строки знать не нужно:

Dim ПослДвеБук As String = Strings.Right(S, 2) 'ПослДвеБук = "ил"

Необходимо обратить внимание на особый синтаксис обращения к этому методу. Здесь строковый объект не указывается перед точкой, а является параметром обращения к методу; это – так называемый статический метод класса.

Поиск в строке. Часто нужно искать в строке положение разделителя слов, например, пробела между именем и отчеством. Для поиска заданного символа используется метод IndexOf(). Этот метод возвращает индекс первого вхождения символа в строку:

 

Dim ФИО As String = "Сидоров Иван Петрович"

 

 

Dim

ПервыйПробел

As Integer = ФИО.IndexOf(" ")'ПервыйПробел = 7

 

 

Dim

P As Integer =

ФИО.IndexOf("о") 'P=3

 

Если нужно найти последнее вхождение символа в строке, используется метод

LastIndexOf():

Страница238

Тема 4.9.Обработка строковых данных

 

Dim

ПоследПробел As Integer = ФИО.LastIndexOf(" ")'ПоследПробел = 12

 

 

P =

ФИО.LastIndexOf("о") 'P=17

 

А что делать, если пробелов или искомых подстрок в строке несколько и требуется разобрать текст по словам? В этом случае используется более общая модификация метода

IndexOf( ):

Строка.IndexOf(Символ,СтартовыйИндексПоиска)

Например:

СледИнПро=ФИО.IndexOf(" ", ПредыдущийИндексПробела)

P = ФИО.IndexOf("о",4) 'P=5

P = ФИО.IndexOf("б",4) 'P=-1 символ “б” не найден

Если символ не найден, возвращается значение –1.

Методы, имеющие несколько вариантов списков параметров обращения, называются

перегруженными методами.

Для полного разбора строки на слова существуют метод и одноименная функция Split(), превращающие строку в массив слов или других подстрок, разделённых запятыми или какими-то другими разделителями. Синтаксис обращения следующий:

Строка.Split(СимволРазделитель) – для метода; Split(Строка,СтрокаРазделитель) – для функции.

И метод, и функция Split() применяются для разбивки исходной строки на подстроки и сохранения этих подстрок в массив. Метод Split() разделяет строку по границам, определяемым одиночными символами, а функция Split() позволяет указывать границу разбиения как последовательность из нескольких символов.

Ниже приведен пример разбора на отдельные слова строки, состоящей из нескольких

слов:

Dim ФИО As String="Иванов Иван Иванович"

Dim Mas ()As String =Split(ФИО," ")

Label1.Text="Фамилия – " & Mas(0) 'Massiv(0)=”Иванов”

Label2.Text="Имя – " & Mas(1) 'Massiv(1)=”Иван”

Label3.Text="Отчество – "& Mas(2) 'Massiv(2)=”Иванович”

Существуют обратные метод и функция Join(), которые возвращают строку, получаемую объединением нескольких строк, содержащихся в указанном массиве. Синтаксис обращения следующий:

String.Join(СимволРазделитель, ОдномерныйМассив) для метода Join(ОдномерныйМассив, СимволРазделитель) для функции.

Здесь и в методе, и в функции в качестве символа разделителя можно использовать, как одиночный символ, так и строку. Если в качестве разделителя задана строка нулевой длины, то все подстроки массива объединяются в одну строку без разделения.

Кроме того, существуют методы, проверяющие окончание строки (EndsWith) и начало строки (StartsWith). Пример их использования очевиден:

 

If TextBox1.Text.EndsWith("ич") Then

 

Обращение = "Дорогой "

 

ElseIf TextBox1.Text.EndsWith("на")

 

Обращение = "Дорогая "

 

ElseОбращение = "Товарищ "

 

End If

Страница239

Тема 4.9.Обработка строковых данных

Замена символов. Для замены символов используется метод Replace()c указанием заменяемых и заменяющих символов:

Строка.Replace(ИсходнаяПодстрока,НоваяПодстрока).

Этот метод возвращает новую подстроку, созданную на основе исходной строки путём указанной замены. Например:

Dim Был As String = "Дорогой "

Dim Станет As String = Был.Replace("ой", "ая" )

Если возвращаемое значение присваивается исходной строке, всё равно образуется новая строка, а старая с этим именем становится недоступной и автоматически удаляется

«службой уборки мусора», встроенной в .NET Framework.

Удаление символов. Для удаления символов используется метод Remove(). Он удаляет заданное количество символов, начиная с заданной позиции:

Строка.Remove(НачальнаяПозиция, КоличествоУдаляемыхСимволов).

Dim Оценка As String ="неудовл."

Оценка = Оценка.Remove(0,2)

Изменение регистра символов. Используемые для этого методы возвращают копию строки, преобразованную к указанному регистру. Метод ToUpper()создаёт строку, преобразованную к верхнему регистру, метод ToLower() – к нижнему регистру. Параметров эти методы не требуют, например:

Dim ВсёБолБуквами As String= ИсходнаяСтрока.ToUpper()

Dim ВсёМалБуквами As String= ИсходнаяСтрока.ToLower()

Иногда пользователи забывают вводить имена собственные с большой буквы. В этом случае приложение может подправлять своего пользователя. Для того, чтобы каждое слово строки начиналось с большой буквы, используется функция VB StrConv() со следующим синтаксисом:

StrConv(ИсходнаяСтрока, VbStrConv.ProperCase).

TextBox1.Text=StrConv(TextBox1.Text,VbStrConv.ProperCase)

После выполнения такого оператора все слова, записанные в текстовом поле TextBox1 в несколько строк, будут начинаться с заглавной буквы. Здесь VbStrConv.ProperCase – встроенная константа VB. Функция StrConv()является наиболее общим методом преобразования регистров. При помощи средства IntelliSense можно изучить и другие его возможности, реализуемые различными встроенными константами VB.

Удаление лишних пробелов. Пробелы в начале или конце строки могут появляться из-за привычки части пользователей нажимать <Space>, где надо и не надо. Лишние пробелы влияют на результат операции сравнения. Метод TrimStart() удаляет пробелы в начале строки, перед первым непробельным символом, TrimEnd() удаляет пробелы в конце строки, а Trim() удаляет пробелы и в конце, и в начале строки.

Создание строки из одинаковых символов. Для создания стоки из заданного количества одинаковых символов используется функция:

StrDup (КоличествоСимволов, Символ).

TextBox1.Text = StrDup(5, "*")

Страница240

Тема 4.9.Обработка строковых данных

VB содержит по два метода для конкатенации строк и многих других операций со строками: вы можете использовать операторы и функции из более ранних версийVB Mid( ), UCase( ), LCase( )и другие, а можете использовать методы .NET FrameworkSubstring( ), ToUpper( ), ToLower( )и другие. Никаких реальных ограничений не существует в применении тех или других методов, хотя более старые методы сохранены в основном в целях совместимости. Список методов и свойств класса String приведён в таблице4.9.5-1. Там же указаны соответствующие функции VB.

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 4.9.4-1

 

 

Метод Framework/

 

 

 

 

Описание

 

 

 

Пример для.NETFramework

 

 

Функция VB

 

 

 

 

 

 

 

 

 

 

 

 

 

Строка.Substring(n[,k])

 

 

 

 

Возвращает фиксированное

 

 

 

 

Dim Cols, Middle As String

 

 

 

 

 

 

 

 

числоkсимволов строки (или

 

 

 

 

Cols = "First Second Third"

 

 

 

 

 

 

 

 

все символы до конца

 

 

 

 

Middle = Cols.SubString(6,6)

 

 

 

Mid(Строка, n[,k])

 

 

 

 

строки, если параметр k

 

 

 

 

'Middle="Second"

 

 

 

 

 

 

 

 

отсутствует),начиная с

 

 

 

 

 

 

 

 

 

 

 

 

 

заданной начальной позиции.

 

 

 

 

 

 

 

 

 

 

 

 

 

Первый элемент строки

 

 

 

 

 

 

 

 

 

 

 

 

 

имеет индекс 0.

 

 

 

 

 

 

 

 

Строка.IndexOf(ПодСтрока[,n] )

 

 

 

 

Ищет позицию вхождения

 

 

 

 

Dim Name As String

 

 

 

 

 

 

 

 

одной строки в другую,

 

 

 

 

Dim S As Short

 

 

 

 

 

 

 

 

начиная с первого (или n-го)

 

 

 

 

Name = "Abraham"

 

 

 

InStr([n,]Строка,ПодСтрока)

 

 

 

 

символа.

 

 

 

 

S = Name.IndexOf("h")

 

 

 

 

 

 

 

 

 

 

 

 

 

'S=4

 

 

 

Строка.LastIndexOf(ПодСтрока[,n] )

 

 

 

 

Ищет позициюпервого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dim Name As String

 

 

 

 

 

 

 

 

вхождения одной строки в

 

 

 

 

Dim S As Short

 

 

 

 

 

 

 

 

другую, начиная с

 

 

 

 

Name = "Abraham"

 

 

 

InStrRev(Строка, ПодСтрока[,n])

 

 

 

 

последнего символа, или

 

 

 

 

S = Name.LastIndexOf("a")

 

 

 

 

 

 

 

 

(если указан аргумент n) с

 

 

 

 

'S=5

 

 

 

 

 

 

 

 

указанной позиции.

 

 

 

 

 

 

 

 

 

 

 

 

 

Поиск ведется справа

 

 

 

 

 

 

 

 

 

 

 

 

 

налево.

 

 

 

 

 

 

 

 

Строка.Split( Разделитель)

 

 

 

 

Преобразует строку,

 

 

 

 

См. пример на стр.275

 

 

 

 

 

 

 

 

разделенную заданным

 

 

 

 

 

 

 

 

Split(Строка, Разделитель)

 

 

 

 

разделителем в массив

 

 

 

 

 

 

 

 

 

 

 

 

 

подстрок.

 

 

 

 

 

 

 

 

Строка.EndsWith(ПодСтрока)

 

 

 

 

Проверяет конец строки на

 

 

 

 

Dim Name As String =

 

 

 

 

 

 

 

 

совпадение суказанной

 

 

 

 

"Abraham"

 

 

 

 

 

 

 

 

подстрокой. Возвращает

 

 

 

 

Dim b As Boolean

 

 

 

 

 

 

 

 

результат логического типа.

 

 

 

 

b = Name.EndsWith("am")

 

 

 

 

 

 

 

 

 

 

 

 

 

‘b=True

 

 

 

Строка.StartsWith(ПодСтрока )

 

 

 

 

Проверяет начало строки на

 

 

 

 

Dim Name As String =

 

 

 

 

 

 

 

 

совпадение с указанной

 

 

 

 

"Abraham"

 

 

 

 

 

 

 

 

подстрокой. Возвращает

 

 

 

 

Dim b As Boolean

 

 

 

 

 

 

 

 

результат логического типа.

 

 

 

 

b = Name.StarsWith("b")

 

 

 

 

 

 

 

 

 

 

 

 

 

‘b=False

 

 

 

Строка.Replace(Старая, Новая )

 

 

 

 

Заменяет старую подстроку в

 

 

 

 

Dim S1 As String = "Карман"

 

 

 

 

 

 

 

 

строке на новую.

 

 

 

 

S1 = S1.Replace("ман","тон")

 

 

 

Replace(Строка, Старая, Новая)

 

 

 

 

 

 

 

 

 

'S1="Картон"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строка.Remove(n, k)

 

 

 

 

Удаляетk символовиз

 

 

 

 

Dim RawStr,CleanStr As String

 

 

 

 

 

 

 

 

середины строки, начиная с

 

 

 

 

RawStr = "Hello333 there!"

 

 

 

 

 

 

 

 

n-го символа.

 

 

 

 

CleanStr = RawStr.Remove(5,3)

 

 

 

 

 

 

 

 

 

 

 

 

 

‘CleanStr="Hello there!"

 

 

 

Строка.ToUpper

 

 

 

 

Изменяет регистр букв

 

 

 

 

Dim Name, NewName As String

 

 

 

 

 

 

 

 

строки на верхний регистр.

 

 

 

 

Name = "Kim"

 

 

 

 

 

 

 

 

 

 

 

 

 

NewName = Name.ToUpper

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

UCase(Строка)

 

 

 

 

 

 

 

 

 

'NewName="KIM"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тема 4.9.Обработка строковых данных

 

 

Страница241

 

Строка.ToLower

 

 

 

Изменяетрегистр букв

 

 

 

Dim Name, NewName As String

 

 

 

 

 

 

 

 

строки на нижний регистр.

 

 

 

Name = "Kim"

 

 

 

 

 

 

 

 

 

 

 

 

NewName = Name.ToLower

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'NewName="kim"

 

 

 

 

Строка.TrimStart([Символ])

 

 

 

Удаляет пробелы или любые

 

 

 

Dim S As String=" Hello!!!"

 

 

 

 

 

 

 

 

указанные в скобках символы

 

 

 

S = S.TrimStart()

 

 

 

 

 

 

 

 

в начале строки. Удаление

 

 

 

‘S="Hello"

 

 

 

 

LTrim(Строка)

 

 

 

любого символа производит

 

 

 

 

 

 

 

 

 

 

 

 

только метод. Функция VB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

удаляет только пробелы.

 

 

 

 

 

 

 

 

Строка.TrimEnd([Символ] )

 

 

 

Удаляет пробелы или любые

 

 

 

Dim S As String = "Hello!!!"

 

 

 

 

 

 

 

 

указанные в скобках символы

 

 

 

S = S.TrimEnd("!")

 

 

 

 

 

 

 

 

в конце строки. Удаление

 

 

 

‘S="Hello"

 

 

 

 

RTrim(Строка)

 

 

 

любого символа производит

 

 

 

 

 

 

 

 

 

 

 

 

только метод. Функция VB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

удаляет только пробелы.

 

 

 

 

 

 

 

 

Строка.Trim([Символ] )

 

 

 

Удаляет пробелы или любые

 

 

 

DimSp, TrAsString

 

 

 

 

 

 

 

 

указанные в скобках

 

 

 

Sp = " Hello "

 

 

 

 

 

 

 

 

символы, как в начале строки,

 

 

 

Tr = Sp.Trim()

 

 

 

 

Trim(Строка)

 

 

 

так и в конце. Удаление

 

 

 

'Tr="Hello"

 

 

 

 

 

 

 

 

любого символа производит

 

 

 

 

 

 

 

 

 

 

 

 

только метод. Функция VB

 

 

 

 

 

 

 

 

 

 

 

 

удаляет только пробелы.

 

 

 

 

 

 

 

 

Строка.Length

 

 

 

Определяет числосимволов в

 

 

 

Dim River As String

 

 

 

 

 

 

 

 

строке.

 

 

 

Dim Size As Short

 

 

 

 

 

 

 

 

 

 

 

 

River = "Mississippi"

 

 

 

 

Len(Строка)

 

 

 

 

 

 

 

Size = River. Length

 

 

 

 

 

 

 

 

 

 

 

 

'Size=11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строка.Insert(n, ПодСтрока)

 

 

 

Вставляет подстроку в n-ю

 

 

 

Dim Oldstr, Newstr As String

 

 

 

 

 

 

 

 

позицию строки.

 

 

 

Old = "Hi Felix"

 

 

 

 

 

 

 

 

 

 

 

 

Newstr=Old.Insert(3,"there")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Newstr="Hi there Felix"

 

 

 

 

String.Join(Символ,ОдномМассив)

 

 

 

Объединяет строки из

 

 

 

Dim Mas()As String

 

 

 

 

 

 

 

 

одномерного массива в

 

 

 

Mas={"хо","ро","шо"}

 

 

 

 

 

 

 

 

одну строку, разделенные

 

 

 

Dim S1, S2 As String

 

 

 

 

Join(Массив[,Символ])

 

 

 

указанным символом. Если

 

 

 

S1 = Join(Mas,":")

 

 

 

 

 

 

 

 

символ не указан, то

 

 

 

S2 = String.Join("", Mas)

 

 

 

 

 

 

 

 

разделяет пробелом.

 

 

 

‘S1="хо:ро:шо"

 

 

 

 

 

 

 

 

 

 

 

 

‘S2="хорошо"

 

 

 

Средства работы со строками класса StringBuilder. Любой объект класса

String является неизменяемым и его значение никогда не изменяется после создания строки. Это означает, что при каждом применении метода, который изменяет значение строки, в действительности создается новый объект типа String. Например, следующее выражение: S=S.Insert(3, "1234")не изменяет исходную строку в памяти. Вместо этого метод Insert() создает новый объект типа String, который затем присваивается объектной переменной S. Исходный строковый объект в памяти, в конце концов, будет уничтожен во время следующей сборки мусора, если только на него не указывает другая переменная. Схема выделения памяти .NET обеспечивает, что этот механизм добавляет относительно небольшие непроизводительные издержки, тем не менее, слишком большое количество операций выделения и освобождения памяти может ухудшить эффективность приложения. Объект типа System.Text.StringBuilder предлагает решение этой проблемы. Причем при

использовании объектов класса StringBuilder необходимо подключить библиотеку

System.Text (Imports System.Text).

Объект типа System.Text.StringBuilder можно представить в виде буфера, который

содержит строку, способную увеличиваться в размерах от нуля символов и до текущей

Тема 4.9.Обработка строковых данных

Страница242

вместимости этого буфера. До тех пор, пока эта вместимость не превышена, строка строится в буфере, и память не выделяется и не освобождается. Если строка становится больше текущей вместимости буфера, объект класса StringBuilder создает буфер большего размера. Используемый по умолчанию буфер изначально содержит 16 символов, но это значение можно изменить, присвоив другое значение вместимости в конструкторе StringBuilder( ) или присвоив новое значение свойству Capacity:

‘Создание объекта StringBuilder с начальной вместимостью 1000 символов.

Dim sb As New StringBuilder(1000)

Строку, хранящуюся в объекте StringBuilder, можно обрабатывать с помощью нескольких методов, большая часть которых имеет такое же имя и работает так же, как методы, определенные в классе String. Например, методы Insert(), Remove()и Replace().Чаще всего строку внутри объекта StringBuilder строят с помощью метода этого объекта Append(), который принимает аргумент любого типа и добавляет его к текущей внутренней строке:

'Создание списка первых 100 целых чисел, разделенных запятыми

For n As Integer = 1 То 100

'Обратите внимание на то, что два метода Append исполняются быстрее, 'чем один метод Append, аргумент которогоконкатенация n и строки ","

sb.Append(n) : sb.Append(",") Next n

sb.Insert(0,"Список чисел:")'Вставляет строку в начало буфера

TextBox1.Text=sb.ToString() ' Список чисел: 1,2,3,4,5,6,...

TextBox2.Text=CStr(sb.Length) ' Длина строки равна 309

Свойство Length возвращает текущую длину внутренней строки.

Также имеется метод AppendFormat( ), который позволяет задать строку форматирования, во многом так же, как и метод String.Format( ), и метод AppendLine( ), который добавляет в буфер обмена StringBuilder строку и используемый по умолчанию символ конца строки:

For n As Integer = 1 То 100 sb.AppendLine(CStr(n))

Next n

В результате этого фрагмента программы получится объект-строка из чисел, причем каждое число будет записываться с новой строки. Так как технически содержимое объекта StringBuilder является не строкой, а символьным буфером, то в нужный момент (например, для вывода результата или присвоения) этот объект необходимо преобразовать в строку методом ToString( ).

Пример 4.9.4-1. Создать проект, который вводит с клавиатуры строки a и b, отображает их на форме, а затем обрабатывает, удаляя из строки a все символы, входящие в строку b и расположенные на нечетных позициях строки b, результат обработки необходимо отобразить на форме.

1.Разработанная форма интерфейса пользователя приведена на рис. 4.9.4-1.

Тема 4.9.Обработка строковых данных

Страница243

Рис. 4.9-4-1

 

Схема алгоритма обработки представлена на рис. 4.9-4-2.

 

b -

Обработка()

строка

 

a -

m=Длина(a)

строка

 

d=Длина(b)

 

i=0,d-1

 

Шаг 2

 

j=0

 

j<m

Нет

 

Да

 

Да aj-ый=bi-ый

Нет

 

Удаляем из а

j=j+1

совпадающий

символ

 

m=m-1

 

End Sub

Рис. 4.9-4-2

2.Программный код решаемой задачи представлен на рис. 4.9-4-3. Он содержит процедуры

vvod( ), vivod( )и Обработка( ).

Public Class Form1

'Процедура вывода результата в TextBox

Sub vivod(ByVal z As String, ByRef t As TextBox)

If z.Length <> 0 Then

 

t.Text = z

 

Elset.Text = "Все удалено"

 

End If

 

End Sub

TextBox

'Функция ввода исходных данных из

Тема 4.9.Обработка строковых данных

Страница244

Соседние файлы в папке УчеП-Раз-4-Инф-270100