Visual Basic_учебник (1108585), страница 6
Текст из файла (страница 6)
В результирующую цепочкупри этом будет включен только один.Основной бинарной операцией над строками является конкатенация,то есть соединение двух строк в одну, обозначаемая символом амперсанд (&). Приведем пример простой программы, соединяющей двастроковых значения:Option Strict OnModule Module1Sub Main()Dim word1 As StringDim word2 As StringDim twoWords As Stringword1 = "Первое"word2 = "Второе"twoWords = word1 & " " & word2Console.WriteLine(twoWords)Console.ReadLine()End SubEnd ModuleПеременным word1 и word2 присваиваются цепочки из 6 символов.Значение twoWords вычисляется как конкатенация трех строк: значение переменной word1, строки из одного символа пробел и значениепеременной word2.
Результат – строка длиной тринадцать символов.В распоряжении программиста имеется несколько констант типаString, доступных непосредственно из исполняющей системы. Наиболее употребительной из них является константа с именем41vbNewLine, включающая символы перехода на новую строку. Замени-те выражение, вычисляющее значение twoWords, на следующее:twoWords = word1 & vbNewLine & word2и сравните полученный результат с предыдущим.В VB предусмотрено множество разнообразных операций со строками,но прежде, чем мы перейдем к их рассмотрению, необходимо поговорить о более общих понятиях – объектах и классах.Классы и объектыVB относится к языкам, поддерживающим объектно-ориентированноепрограммирование (ООП).
Понятие объекта является достаточно сложным, поэтому в данном пособии мы коснемся лишь некоторых его сторон.Объект в ООП является расширением введенного выше понятия значения. Так же, как и простые значения, каждый объект относится к определенному типу, называемому в случае объектов классом, и несетв себе в некотором виде ту или иную информацию: числа, текст и т.п. Вотличие от простых значений, связанная с объектом информация может иметь сложный характер, то есть состоять из множества болеепростых элементов. Например, строка включает информацию о количестве входящих в нее символов, а также сами символы, составляющиеэту строку.
Причем различные элементы информации должны бытьвзаимно согласованы друг с другом. Скажем, объем памяти, отведенный для хранения символов строки, должен строго соответствоватьдлине строки.Второй важной составляющей объекта является набор методов – подпрограмм и функций для работы с информацией, включенной в объ42ект. Набор методов объекта аналогичен набору операций, определенных для простых значений того или иного типа. Чаще всего, отдельныеэлементы заключенных в объекте данных не доступны для непосредственного манипулирования. Непосредственные манипуляции с информацией внутри объекта могут легко нарушить его целостность.Скажем, если изменить фактическое число символов в строке, но непоменять информацию о длине строки, то такой объект уже нельзя будет называть строкой.
Для работы с информацией в объекте применяют лишь методы именно этого объекта. В этом случае можно быть уверенным, что объект всегда находится в самосогласованном состоянии.Методы обозначаются именами1 и, в целом, играют ту же роль, чтообычные подпрограммы и функции, но вызываются несколько иначе:<значение>.<имя_метода> [ (<параметры>) ]Несмотря на отличия в записи, вызов метода можно считать вызовомобычной функции с указанием объекта <значение> в качестве дополнительного, «нулевого» параметра.
Рассмотрим несколько примеровметодов, определенных для объектов типа String.Методы объектов класса StringМетод с именем Length не имеет параметров и возвращает длинустроки в виде значения типа Integer. Продумайте, что выдаст в качестве результата следующая программа?1Для некоторых объектов определены также методы, обозначенные специальными символами аналогично арифметическим операциям. Например, определена операция +. Из таких объектов можно строить выражения с инфиксной записью операций аналогично рассмотренным выше арифметическимвыражениям.43Option Strict OnModule Module1Sub Main()Dim word1 As StringDim word2 As StringDim twoWords As Stringword1 = "Первое"word2 = "второе"twoWords = word1 & " " & word2Console.WriteLine(twoWords.Length-word1.Length _- word2.Length)Console.ReadLine()End SubEnd ModuleВыполните ее и сравните полученное значение со своим предварительным решением.Следующий интересный метод объектов String обозначается именем1IndexOf.
Его параметром должно быть еще одно значение типаString – образец. Метод IndexOf ищет в строке образец, заданный вкачестве параметра, и возвращает индекс2 – значение типа Integer,указывающее найденную позицию в строке, начиная с которой символы строки и образца совпадают. Если образец присутствует в самомначале строки, то возвращается значение 0, если строка совпадает собразцом, начиная со второго символа, то индекс равен 1 и т.д. Например, приведенная ниже программа напечатает число 4, так каксимволы строки line с номерами 5 и 6 совпадают с символами образца.1В действительности у метода IndexOf есть и другие формы вызова, но вданном пособии мы их не рассматриваем.2Если «нумерацию» принято начинать с единицы, то «индексацию» начинаютс нуля.44Option Strict OnModule Module1Sub Main()Dim line As String = "3,1415; 2,718"Dim p As Integerp = line.IndexOf("15")Console.WriteLine(p)Console.ReadLine()End SubEnd ModuleОтметим, что если подстрока не найдена, то метод IndexOf возвращает отрицательное значение -1.
Это его свойство часто используют припостроении алгоритмов обработки строк.Следующий метод объектов типа String предназначен для созданияновых строк путем извлечения подстроки из оригинала. Имя метода –Substring. У него две формы записи (сигнатуры), отличающиеся числом и типом требуемых параметров. Если в списке параметров указано лишь одно число типа Integer – индекс начала подстроки, то в качестве результата возвращается «хвост» строки, начинающийся с соответствующего символа.
Напомним, что первый символ имеет индекс 0,так что line.Substring(0) вернет точную копию оригинала. Следующая программа позволит напечатать второе число из заданнойстроки.Option Strict OnModule Module1Sub Main()Dim line As String = "3,1415; 2,718"Dim second As StringDim p As Integerp = line.IndexOf(";")second = line.Substring(p + 1)Console.WriteLine("second= " & second)Console.ReadLine()End SubEnd Module45Подумайте, будет ли включен в значение, присвоенное переменнойsecond, символ пробела, имеющий индекс 7 в исходной строке?Вторая форма вызова IndexOf допускает указание двух параметровтипа Integer. Первое из них интерпретируется как индекс начала подстроки, а второй – длина подстроки.
Разберите алгоритм исполненияпрограммы, разбивающей строку на отдельные элементы:Option Strict OnModule Module1Sub Main()Dim line As String = _"3,1415; 2,718; 6,022e-23; 8,2056E-5"Dim word As StringDim p As IntegerFor i As Integer = 1 To 3p = line.IndexOf(";")word = line.Substring(0, p)Console.WriteLine(word)line = line.Substring(p + 1)Next iConsole.WriteLine(line)Console.ReadLine()End SubEnd ModuleПодытожим сказанное сводкой свойств типа String таблицей 4.46Таблица 4 Основные свойства значений типа StringМножествозначений:Операции:StringПустая строка либо последовательность символовUNICODE любой длины.Конкатенация&Длина строки.LengthИзвлечение подстроки,.Substring (Startindex Asначинающейся со Startindex Integer) As StringИзвлечение подстроки.Substring (Startindex Asдлиной Length,Integer, Length Asначинающейся со StartIndex Integer) As StringИндекс символа, с которого.IndexOf (value Asв строке начинаетсяString) As Integerподстрока ValueКак выполнить преобразование Число → ТекстК этому моменту у Вас уже не должно возникать сомнений в том, чточисло 3.1415 типа Double и текст "3.1415" типа String обладаютсовершенно различными свойствами.
Тем не менее, часто требуетсяпреобразовать число в последовательность символов, или наоборот,попытаться интерпретировать последовательность символов как число.Первое преобразование выполнить легко. Дело в том, что для всехобъектов VB определен метод ToString, возвращающий текстовоепредставление данного объекта. Например:47Option Strict OnModule Module1Sub Main()Dim s As Strings = Math.PI.ToStringConsole.WriteLine("Длина представления " & s _& " равна " & s.Length.ToString)Console.ReadLine()End SubEnd ModuleНапомним, что функция Math.PI возвращает значение типа Double.Для этого значения как раз и вызывается метод ToString. Аналогично,s.Length возвращает значение типа Integer, для которого тоже вызывается метод ToString. Отметим, что, несмотря на идентичностьназвания, это две разные функции, относящиеся к объектам разноготипа и выполняющие преобразование по разным алгоритмам.Вместо многочисленных вызовов метода ToString и конкатенацийможно воспользоваться более общей функцией String.Format.
Этойфункции можно указывать сколь угодно много аргументов. Первый изних – формат – должен быть типа String. Второй и последующиеаргументы – преобразуемые параметры – могут быть любого типа.Функция String.Format анализирует формат и заменяет в нем отдельные элементы на текстовое представление преобразуемых параметров. Пример:String.Format("длина окружности радиуса {0} = {1}", _r, 2 * Math.PI * r)Здесь элементы формата {0} и {1} будут заменены на текстовоепредставление двух чисел, указанных на месте преобразуемых параметров.В простейшем случае элемент формата представляет собой заключенный в фигурные скобки индекс преобразуемого параметра.