Nozioni fondamentali sulle stringhe in Visual Basic
Il tipo di dati String
rappresenta una serie di caratteri, ognuno dei quali, a sua volta, rappresenta un'istanza del tipo di dati Char
. Questo argomento illustra i concetti di base relativi alle stringhe in Visual Basic.
Variabili di tipo String
È possibile assegnare a un'istanza di una stringa un valore letterale che rappresenta una serie di caratteri. Ad esempio:
Dim MyString As String
MyString = "This is an example of the String data type"
Una variabile String
può accettare anche qualsiasi espressione che restituisca una stringa. Di seguito sono riportati alcuni esempi.
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"
Qualsiasi valore letterale assegnato a una variabile String
deve essere racchiuso tra virgolette (""). Questo implica che all'interno di una stringa le virgolette non possono essere rappresentate dal segno di virgolette. Il codice seguente, ad esempio, causa un errore di compilazione:
Dim myString As String
' This line would cause an error.
' myString = "He said, "Look at this example!""
L'errore è determinato dal fatto che durante la compilazione la stringa viene considerata terminata dopo il secondo segno di virgolette e il resto della stringa è interpretato come codice. Per risolvere il problema, Visual Basic interpreta due segni di virgolette presenti in un valore letterale stringa come un singolo segno di virgolette nella stringa. L'esempio seguente illustra il modo corretto per inserire le virgolette in una stringa:
' The value of myString is: He said, "Look at this example!"
myString = "He said, ""Look at this example!"""
Nell'esempio precedente, la coppia di virgolette che precede la parola Look
diventa un segno di virgolette nella stringa. Le tre serie di virgolette alla fine della riga rappresentano le virgolette appartenenti alla stringa seguite dal carattere di terminazione della stringa.
I valori letterali stringa possono contenere più righe:
Dim x = "hello
world"
La stringa risultante contiene le sequenze di nuove righe usate nel valore letterale stringa (vbcr, vbcrlf e così via). Non è più necessario usare la soluzione alternativa precedente:
Dim x = <xml><![CDATA[Hello
World]]></xml>.Value
Caratteri nelle stringhe
Una stringa può essere considerata una serie di valori Char
. Il tipo String
è dotato di funzioni predefinite che consentono di eseguire numerose manipolazioni della stringa, simili a quelle consentite dalle matrici. Come tutte le matrici in .NET Framework, queste sono matrici in base zero. Per fare riferimento a un carattere specifico di una stringa è possibile usare la proprietà Chars
, che consente di accedere a un carattere in base alla sua posizione all'interno della stringa. Ad esempio:
Dim myString As String = "ABCDE"
Dim myChar As Char
' The value of myChar is "D".
myChar = myString.Chars(3)
Nell'esempio precedente, la proprietà Chars
della stringa restituisce il quarto carattere della stringa, ovvero D
, e lo assegna a myChar
. È anche possibile ottenere la lunghezza di una particolare stringa mediante la proprietà Length
. Se è necessario eseguire su una stringa più manipolazioni analoghe a quelle consentite nelle matrici, è possibile convertire la stringa in una matrice di istanze di Char
usando la funzione ToCharArray
della stringa. Ad esempio:
Dim myString As String = "abcdefghijklmnop"
Dim myArray As Char() = myString.ToCharArray
La variabile myArray
ora contiene una matrice di istanze di Char
, ognuna delle quali rappresenta un carattere di myString
.
Immutabilità delle stringhe
Una stringa è non modificabile e quindi il suo valore non può essere modificato dopo che è stata creata. Questo non impedisce tuttavia di assegnare più valori a una variabile di tipo String. Si consideri l'esempio seguente:
Dim myString As String = "This string is immutable"
myString = "Or is it?"
In questo esempio, dopo aver creato una variabile stringa, le viene assegnato un valore che successivamente viene modificato.
Più precisamente, nella prima riga viene creata un'istanza di tipo String
cui viene assegnato il valore This string is immutable
. Nella seconda riga dell'esempio viene creata una nuova istanza a cui viene assegnato il valore Or is it?
. Il riferimento alla prima istanza viene quindi ignorato e con la variabile stringa viene archiviato il riferimento alla nuova istanza.
A differenza di altri tipi di dati intrinseci, String
è un tipo riferimento. Quando una variabile di tipo riferimento viene passata come argomento di una funzione o di una subroutine, invece del valore effettivo della stringa viene passato un riferimento all'indirizzo di memoria in cui sono archiviati i dati Nell'esempio precedente, quindi, il nome della variabile rimane lo stesso, ma punta a un'istanza nuova e diversa della classe String
, che contiene il nuovo valore.