Dela via


Grunderna för strängar i Visual Basic

Datatypen String representerar en serie tecken (var och en representerar i sin tur en instans av Char datatypen). Det här avsnittet beskriver de grundläggande begreppen för strängar i Visual Basic.

Strängvariabler

En instans av en sträng kan tilldelas ett literalvärde som representerar en serie tecken. Till exempel:

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

En String variabel kan också acceptera alla uttryck som utvärderas till en sträng. Exempel visas nedan:

    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"

Alla literaler som har tilldelats en String variabel måste omges av citattecken (""). Det innebär att ett citattecken inom en sträng inte kan representeras av ett citattecken. Följande kod orsakar till exempel ett kompilatorfel:

Dim myString As String

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

Den här koden orsakar ett fel eftersom kompilatorn avslutar strängen efter det andra citattecknet och resten av strängen tolkas som kod. För att lösa det här problemet tolkar Visual Basic två citattecken i en strängliteral som ett citattecken i strängen. I följande exempel visas det korrekta sättet att inkludera ett citattecken i en sträng:

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

I föregående exempel blir de två citattecknen före ordet Look ett citattecken i strängen. De tre citattecknen i slutet av raden representerar ett citattecken i strängen och strängavslutstecknet.

Strängliteraler kan innehålla flera rader:

Dim x = "hello  
world"  

Den resulterande strängen innehåller nya radsekvenser som du använde i strängliteralen (vbcr, vbcrlf osv.). Du behöver inte längre använda den gamla lösningen:

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

Tecken i strängar

En sträng kan betraktas som en serie Char värden och String typen har inbyggda funktioner som gör att du kan utföra många manipuleringar på en sträng som liknar de manipuleringar som tillåts av matriser. Precis som alla matriser i .NET Framework är dessa nollbaserade matriser. Du kan referera till ett specifikt tecken i en sträng via Chars egenskapen, vilket ger ett sätt att komma åt ett tecken genom den position där det visas i strängen. Till exempel:

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

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

I exemplet ovan Chars returnerar egenskapen för strängen det fjärde tecknet i strängen, som är D, och tilldelar det till myChar. Du kan också hämta längden på en viss sträng via egenskapen Length . Om du behöver utföra flera manipuleringar av matristyp på en sträng kan du konvertera den till en matris med Char instanser med hjälp av strängens ToCharArray funktion. Till exempel:

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

Variabeln myArray innehåller nu en matris med Char värden som var och en representerar ett tecken från myString.

Oföränderlighet för strängar

En sträng är oföränderlig, vilket innebär att dess värde inte kan ändras när den har skapats. Detta hindrar dock inte att du tilldelar mer än ett värde till en strängvariabel. Ta följande som exempel:

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

Här skapas en strängvariabel med ett värde och dess värde ändras.

Mer specifikt skapas en instans av typen String på den första raden och ges värdet This string is immutable. På den andra raden i exemplet skapas en ny instans och får värdet Or is it?, och strängvariabeln tar bort sin referens till den första instansen och lagrar en referens till den nya instansen.

Till skillnad från andra inbyggda datatyper String är en referenstyp. När en variabel av referenstyp skickas som ett argument till en funktion eller underrutin skickas en referens till den minnesadress där data lagras i stället för strängens faktiska värde. Så i föregående exempel förblir namnet på variabeln detsamma, men det pekar på en ny och annan instans av String klassen, som innehåller det nya värdet.

Se även