Podstawowe informacje o ciągach w Visual Basic

Typ String danych reprezentuje serię znaków (każdy z nich reprezentuje z kolei wystąpienie Char typu danych). W tym temacie przedstawiono podstawowe pojęcia dotyczące ciągów w Visual Basic.

Zmienne ciągu

Wystąpienie ciągu może mieć przypisaną wartość literału reprezentującą serię znaków. Na przykład:

Dim MyString As String
MyString = "This is an example of the String data type"

Zmienna String może również akceptować dowolne wyrażenie, które daje w wyniku ciąg. Odpowiednie przykłady przedstawiono poniżej:

    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"

Każdy literał przypisany do zmiennej String musi być ujęta w cudzysłów (""). Oznacza to, że cudzysłów w ciągu nie może być reprezentowany przez cudzysłów. Na przykład następujący kod powoduje błąd kompilatora:

Dim myString As String

' This line would cause an error.
' myString = "He said, "Look at this example!""

Ten kod powoduje błąd, ponieważ kompilator kończy ciąg po drugim cudzysłowie, a pozostała część ciągu jest interpretowana jako kod. Aby rozwiązać ten problem, język Visual Basic interpretuje dwa znaki cudzysłowu w literału ciągu jako jeden cudzysłów w ciągu. W poniższym przykładzie pokazano prawidłowy sposób uwzględnienia cudzysłowu w ciągu:

' The value of myString is: He said, "Look at this example!"
myString = "He said, ""Look at this example!"""

W poprzednim przykładzie dwa cudzysłowy poprzedzające wyraz Look stają się jednym znakiem cudzysłowu w ciągu. Trzy znaki cudzysłowu na końcu wiersza reprezentują jeden cudzysłów w ciągu i znak zakończenia ciągu.

Literały ciągu mogą zawierać wiele wierszy:

Dim x = "hello  
world"  

Wynikowy ciąg zawiera sekwencje nowego wiersza, które były używane w literału ciągu (vbcr, vbcrlf itp.). Nie trzeba już używać starego obejścia:

Dim x = <xml><![CDATA[Hello  
World]]></xml>.Value  

Znaki w ciągach

Ciąg można traktować jako serię Char wartości, a String typ ma wbudowane funkcje, które umożliwiają wykonywanie wielu manipulacji na ciągu przypominającym manipulacje dozwolone przez tablice. Podobnie jak wszystkie tablice w programie .NET Framework, są to tablice oparte na zera. Można odwoływać się do określonego znaku w ciągu za pośrednictwem Chars właściwości, która zapewnia dostęp do znaku według pozycji, w której pojawia się w ciągu. Na przykład:

    Dim myString As String = "ABCDE"
    Dim myChar As Char

    ' The value of myChar is "D".
    myChar = myString.Chars(3)

W powyższym przykładzie Chars właściwość ciągu zwraca czwarty znak w ciągu , czyli D, i przypisuje go do myCharelementu . Możesz również uzyskać długość określonego ciągu za pomocą Length właściwości . Jeśli musisz wykonać wiele manipulacji typu tablicy na ciągu, możesz przekonwertować go na tablicę Char wystąpień przy użyciu ToCharArray funkcji ciągu. Na przykład:

Dim myString As String = "abcdefghijklmnop"
Dim myArray As Char() = myString.ToCharArray

Zmienna myArray zawiera teraz tablicę Char wartości, z których każdy reprezentuje znak z myString.

Niezmienność ciągów

Ciąg jest niezmienny, co oznacza, że nie można zmienić jego wartości po jej utworzeniu. Nie uniemożliwia to jednak przypisania więcej niż jednej wartości do zmiennej ciągu. Rozważmy następujący przykład:

Dim myString As String = "This string is immutable"
myString = "Or is it?"

W tym miejscu jest tworzona zmienna ciągu, biorąc pod uwagę wartość, a następnie zmieniana jest jej wartość.

Mówiąc dokładniej, w pierwszym wierszu jest tworzone wystąpienie typu String i otrzymuje wartość This string is immutable. W drugim wierszu przykładu zostanie utworzone nowe wystąpienie i nadane wartości Or is it?, a zmienna ciągu odrzuca odwołanie do pierwszego wystąpienia i przechowuje odwołanie do nowego wystąpienia.

W przeciwieństwie do innych typów danych wewnętrznych, String jest typem referencyjnym. Gdy zmienna typu odwołania jest przekazywana jako argument do funkcji lub podroutine, odwołanie do adresu pamięci, w którym są przechowywane dane, jest przekazywane zamiast rzeczywistej wartości ciągu. W poprzednim przykładzie nazwa zmiennej pozostaje taka sama, ale wskazuje na nowe i inne wystąpienie String klasy, która zawiera nową wartość.

Zobacz też