Основы работы со строками в Visual Basic
Тип данных String
представляет последовательность символов (каждый из которых, в свою очередь, представляет экземпляр типа данных Char
). В этом разделе представлены основные понятия строк в Visual Basic.
Строковые переменные
Экземпляру строки можно назначить литеральное значение, которое представляет ряд символов. Например:
Dim MyString As String
MyString = "This is an example of the String data type"
Переменная String
также может принимать любое выражение, результатом которого является строка. Ниже приведены примеры.
Dim OneString As String
Dim TwoString As String
OneString = "one, two, three, four, five"
' Evaluates to "two".
TwoString = OneString.Substring(5, 3)
OneString = "1"
' Evaluates to "11".
TwoString = OneString & "1"
Любой литерал, который присваивается переменной String
, должен быть заключен в кавычки (""). Это означает, что кавычки в пределах строки не могут быть представлены кавычкой. Например, следующий код вызовет ошибку компиляции:
Dim myString As String
' This line would cause an error.
' myString = "He said, "Look at this example!""
Этот код вызывает ошибку, так как компилятор завершает строку после второй пары кавычек, а остаток строки интерпретируется как код. Чтобы решить эту проблему, Visual Basic интерпретирует две кавычки в строковом литерале как одну кавычку в строке. В следующем примере показан правильный способ указания кавычек в строке:
' The value of myString is: He said, "Look at this example!"
myString = "He said, ""Look at this example!"""
В предыдущем примере два символа кавычек перед словом Look
становятся одним символом кавычек в строке. Три символа кавычек в конце строки представляют один символ кавычек в строке и конечный символ строки.
Строковые литералы могут содержать несколько строк:
Dim x = "hello
world"
Результирующая строка содержит последовательности новых строк, используемых в строковом литерале (vbcr, vbcrlf и т. д.). Вам больше не требуется использовать старое решение:
Dim x = <xml><![CDATA[Hello
World]]></xml>.Value
Символы в строках
Строку можно представить как последовательность значений Char
. При этом тип String
имеет встроенные функции, которые позволяют работать со строками, как с массивами. Как и все массивы в платформа .NET Framework, это отсчитываемые от нуля массивы. К определенному символу в строке можно обратиться с помощью свойства Chars
, которое предоставляет механизм доступа к символу по позиции, в которой он отображается в строке. Например:
Dim myString As String = "ABCDE"
Dim myChar As Char
' The value of myChar is "D".
myChar = myString.Chars(3)
В приведенном выше примере свойство Chars
строки возвращает четвертый символ в строке, D
, и присваивает его myChar
. Вы также можете получить длину определенной строки с помощью свойства Length
. Если вам требуется выполнить несколько манипуляций со строкой, можно преобразовать ее в массив экземпляров Char
с помощью функции ToCharArray
строки. Например:
Dim myString As String = "abcdefghijklmnop"
Dim myArray As Char() = myString.ToCharArray
Переменная myArray
теперь содержит массив значений Char
, каждое из которых представляет символ из myString
.
Неизменность строк
Строка неизменяема, что означает, что его значение невозможно изменить после создания. Однако это не мешает назначить строковой переменной более одного значения. Рассмотрим следующий пример:
Dim myString As String = "This string is immutable"
myString = "Or is it?"
Здесь строковая переменная создается, получает значение, которое затем изменяется.
В частности, в первой строке создается экземпляр типа String
, которому присваивается значение This string is immutable
. Во второй строке примера создается новый экземпляр, которому присваивается значение Or is it?
. При этом строковая переменная удаляет ссылку на первый экземпляр и сохраняет ссылку на новый экземпляр.
В отличие от других встроенных типов данных String
— это ссылочный тип. Если переменная ссылочного типа передается в качестве аргумента функции или подпрограмме, вместо фактического значения строки передается ссылка на адрес в памяти, где хранятся данные. Поэтому в предыдущем примере имя переменной остается таким же, но оно указывает на другой экземпляр класса String
, который содержит новое значение.