Fundamentos de cadenas en Visual Basic

El tipo de datos de String representa una serie de caracteres (y cada uno de ellos representa a su vez una instancia del tipo de datos Char). En este tema se presentan conceptos básicos de las cadenas de Visual Basic.

Variables de cadena

A una instancia de una cadena se le puede asignar un valor literal que represente una serie de caracteres. Por ejemplo:

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

Una variable String también puede aceptar cualquier expresión que se evalúe como una cadena. A continuación se muestran algunos ejemplos:

    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"

Cualquier literal que se asigna a una variable String debe ir entre comillas (""). Esto significa que una comilla contenida en una cadena no se puede representar mediante una comilla. Por ejemplo, el código siguiente causa un error del compilador:

Dim myString As String

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

Este código provoca un error porque el compilador termina la cadena después de la segunda comilla, y el resto de la cadena se interpreta como código. Para solucionar este problema, Visual Basic interpreta los dos caracteres de comillas de un literal de cadena como uno solo en la cadena. En el ejemplo siguiente se muestra la forma correcta de incluir una comilla en una cadena:

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

En el ejemplo anterior, las dos comillas que preceden a la palabra Look se convierten en una comilla en la cadena. Las tres comillas al final de la línea representan una comilla en la cadena y un carácter de terminación de cadena.

Los literales de cadena pueden contener varias líneas:

Dim x = "hello  
world"  

La cadena resultante contiene secuencias de nueva línea que usó en el literal de cadena (vbcr, vbcrlf, etc.). La solución anterior ya no es necesaria:

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

Caracteres en cadenas

Una cadena puede considerarse como una serie de valores Char y el tipo String tiene funciones integradas que permiten realizar muchas manipulaciones en una cadena similares a las permitidas por las matrices. Como toda la matriz en .NET Framework, son matrices de base cero. Puede hacer referencia a un carácter específico de una cadena con la propiedad Chars, que proporciona una forma de acceso a un carácter mediante la posición en la que este aparece en la cadena. Por ejemplo:

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

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

En el ejemplo anterior, la propiedad Chars de la cadena devuelve el cuarto carácter de la cadena, que es D, y lo asigna a myChar. También puede obtener la longitud de una cadena concreta mediante la propiedad Length. Si necesita realizar varias manipulaciones de tipo de matriz en una cadena, puede convertirla en una matriz de instancias de Char usando la función ToCharArray de la cadena. Por ejemplo:

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

La variable myArray contiene ahora una matriz de valores Char y cada uno representa un carácter de myString.

Inmutabilidad de cadenas

Una cadena es inmutable, lo que significa que su valor no puede modificarse una vez creado. Sin embargo, esto no impide asignar más de un valor a una variable de cadena. Considere el ejemplo siguiente:

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

Aquí se crea una variable de cadena con un valor y, a continuación, se cambia su valor.

Más concretamente, en la primera línea, se crea una instancia de tipo String y se le asigna el valor This string is immutable. En la segunda línea del ejemplo se crea una nueva instancia y se le asigna el valor Or is it?, y la variable de cadena descarta su referencia a la primera instancia y almacena una referencia a la nueva instancia.

A diferencia de otros tipos de datos intrínsecos, String es un tipo de referencia. Cuando una variable de tipo de referencia se pasa como argumento a una función o subrutina, se pasa una referencia a la dirección de memoria donde se almacenan los datos en lugar del valor real de la cadena. Así, en el ejemplo anterior, el nombre de la variable sigue siendo el mismo, pero apunta a una nueva instancia diferente de la clase String, que contiene el nuevo valor.

Consulte también