Manipulación de cadenas con la clase String

Manipulación de cadenas con la clase String

La clase String nos provee de un amplio abanico de métodos, para realizar todas las operaciones que en anteriores versiones del lenguaje debíamos codificar a través de funciones.

Tomemos el que podría ser el ejemplo más significativo: el tipo String. Observemos el Código fuente 294, y comparemos con el fuente del ejemplo anterior.

Dim lsCadena As String Dim liLongitud As Integer Dim lsCambiada As String lsCadena = "esto es una prueba" liLongitud = lsCadena.Length ' 18 lsCambiada = lsCadena.ToUpper() ' ESTO ES UNA PRUEBA

Código fuente 294

Al ser una cadena, tanto un tipo de dato como un objeto de la clase String, podemos manipularlo como cualquier otro objeto de la jerarquía de la plataforma. En esta ocasión, hemos recuperado la longitud

de la cadena mediante su propiedad Length, y la hemos convertido a mayúsculas ejecutando su método ToUpper( ), asignado el resultado a otra variable.

Para comprobar la versatilidad que ahora nos proporcionan los tipos de datos, cuando declaramos una variable String, podemos hacerlo como en versiones anteriores del lenguaje, o al estilo OOP. Si consultamos la ayuda de .NET Framework, encontraremos una entrada con el título String Class, que describe este tipo como una clase más del sistema. Veamos el Código fuente 295.

Sub Main() ' modo tradicional Dim lsCad1 As String lsCad1 = "mesa"

' instanciar un objeto String y asignar valor Dim loCad2 As New String("silla")

' declarar variable e instanciar un objeto ' String en la misma línea Dim loCad3 As String = New String("coche")

' declarar variable e instanciar un objeto ' String en la misma línea; el constructor ' utilizado en este caso requiere un array ' de objetos Char; observe el lector la forma ' de crear un array, asignando valores al ' mismo tiempo Dim loCad4 As String = New String(New Char() {"t", "r", "e", "n"})

© Grupo EIDOS 21. Aplicando un enfoque enteramente OOP en el código

Console.WriteLine("lsCad1 --> {0}", lsCad1) Console.WriteLine("loCad2 --> {0}", loCad2) Console.WriteLine("loCad3 --> {0}", loCad3) Console.WriteLine("loCad4 --> {0}", loCad4)

Console.ReadLine() End Sub

Código fuente 295

Una vez visto el fuente anterior, debemos realizar algunas aclaraciones. Como ya adelantábamos en el tema sobre .NET Framework, y podemos comprobar utilizando el

constructor de la clase String que recibe como parámetro un array Char; el tipo String no pertenece puramente al conjunto de tipos primitivos de la plataforma, ya que internamente, el entorno manipula una cadena como un array de tipos Char; aunque para nuestra comodidad, este es un proceso transparente, que gestiona la plataforma por nosotros.

En segundo lugar, y este también es un trabajo realizado transparentemente por el entorno, cada vez que creamos o instanciamos un tipo String, obtenemos lo que se denomina una cadena inalterable. Internamente, cuando realizamos una operación sobre la cadena: convertirla a mayúsculas, extraer una subcadena, etc., el CLR crea una nueva instancia de String, asignándola a la misma variable. En apariencia, realizamos modificaciones sobre la misma cadena, pero en realidad, cada operación genera nuevos objetos String.

Por último, no es ahora posible crear cadenas de longitud fija, como ocurría en versiones anteriores de

VB. En este apartado realizaremos una revisión de los métodos de esta clase, a través de un conjunto de

ejemplos, que a modo ilustrativo, nos permitan familiarizarnos con el modo en que se manejan cadenas en VB.NET.

Debido al elevado número de miembros que contienen la mayoría de los tipos de la plataforma .NET, tanto clases, como estructuras, tipos de datos, etc,; y a que muchos de ellos disponen de versiones sobrecargadas; en la descripción de cada tipo haremos un repaso de sus miembros principales, remitiendo al lector, a la documentación de referencia que sobre los tipos existe en la ayuda de la plataforma .NET, en donde encontrará toda la información detallada.

Antes de comenzar a describir los métodos de esta clase, y puesto que una cadena es un array de tipos Char, es importante tener en cuenta que la primera posición corresponde al cero. Esta aclaración la realizamos fundamentalmente, de cara a los métodos que requieran el manejo de posiciones concretas

de la cadena. • Trim( ), TrimStart( ), TrimEnd( ). Eliminan los espacios a ambos lados de una cadena, al

comienzo o al final. Ver el Código fuente 296.

Dim lsCadena As String lsCadena = " Hola .NET "

Dim lsQuitar As String lsQuitar = lsCadena.TrimEnd() ' " Hola .NET" lsQuitar = lsCadena.TrimStart() ' "Hola .NET " lsQuitar = lsCadena.Trim() ' "Hola .NET"

Programación con Visual Basic .NET © Grupo EIDOS

Código fuente 296

• PadLeft( ), PadRight( ). Rellenan una cadena por la izquierda o derecha utilizando un determinado carácter de relleno. Debemos especificar la longitud total de la cadena resultante. Como el carácter de relleno es un tipo Char, podemos especificar que se trata de este tipo,

situando junto al carácter de relleno, la letra c. Ver el Código fuente 297.

Dim lsCadena As String Dim lsRellena As String lsCadena = "Hola" lsRellena = lsCadena.PadLeft(10) ' " Hola" lsRellena = lsCadena.PadRight(10, "W"c) ' "HolaWWWWWW"

Código fuente 297

• Insert( ). Inserta en la cadena, una subcadena a partir de una posición determinada. Ver el Código fuente 298.

Dim lsCadena As String Dim lsAgregar As String lsCadena = "Estamos programando" lsAgregar = lsCadena.Insert(2, "HOLA") ' "EsHOLAtamos programando"

Código fuente 298

• Remove( ). Elimina de la cadena un número determinado de caracteres, comenzando por una posición específica. Ver el Código fuente 299.

Dim lsCadena As String Dim lsQuitar As String lsCadena = "Estamos programando" lsQuitar = lsCadena.Remove(5, 3) ' "Estamprogramando"

Código fuente 299

• Replace( ). Cambia dentro de la cadena, todas las ocurrencias de una subcadena por otra. Ver el Código fuente 300.

Dim lsCadCompleta As String lsCadCompleta = "En el bosque se alza el castillo negro" Console.WriteLine("Replace --> {0}", lsCadCompleta.Replace("el", "la"))

Código fuente 300

• StartsWith( ), EndsWith( ). Comprueban que en la cadena exista una subcadena al principio o final respectivamente. Ver el Código fuente 301.

© Grupo EIDOS 21. Aplicando un enfoque enteramente OOP en el código

Dim lsCadena As String lsCadena = "veinte" Console.WriteLine(lsCadena.StartsWith("ve")) ' True Console.WriteLine(lsCadena.EndsWith("TE")) ' False

Código fuente 301

• SubString( ). Obtiene una subcadena comenzando por una posición de la cadena, y extrayendo un número de caracteres.

• IndexOf( ), LastIndexOf( ). Buscan una subcadena pasada como parámetro, comenzando por el principio y el fin respectivamente; y devuelven la posición de comienzo de dicha

subcadena. Ver el Código fuente 302.

Dim lsCadCompleta As String lsCadCompleta = "En el bosque se alza el castillo negro" Console.WriteLine("Substring --> {0}", lsCadCompleta.Substring(6, 5)) ' "bosqu" Console.WriteLine("IndexOf --> {0}", lsCadCompleta.IndexOf("el")) ' 3 Console.WriteLine("LastIndexOf --> {0}", lsCadCompleta.LastIndexOf("el")) ' 21

Código fuente 302

• ToUpper( ), ToLower( ). Cambian la cadena a mayúsculas y minúsculas respectivamente. Ver el Código fuente 303.

Dim lsCadMayMin As String lsCadMayMin = "CambIaNDO A mayúsCUlAs Y MINúscULAS" Console.WriteLine("Pasar a may. --> {0}", lsCadMayMin.ToUpper()) Console.WriteLine("Pasar a min. --> {0}", lsCadMayMin.ToLower())

Código fuente 303

• Concat( ). Concatena dos cadenas pasadas como parámetro. Este es un método compartido de la clase String, por lo que no se requiere una instancia previa de la clase. El modo, sin

embargo más rápido y sencillo para concatenar, sigue siendo el operador específico de concatenación: &. Ver el Código fuente 304.

Dim lsConcatenar As String lsConcatenar = String.Concat("Hola ", "a todos") lsConcatenar = "ahora usamos" & " el operador para concatenar"

Código fuente 304

• Copy( ). Crea un nuevo objeto String, aunque el medio más sencillo consiste en asignar una cadena a la variable. Ver el Código fuente 305.

Programación con Visual Basic .NET © Grupo EIDOS

Dim lsCadA As String Dim lsCadB As String lsCadA = "uno" lsCadB = String.Copy("OTRO") Console.WriteLine("CadenaA --> {0}", lsCadA) Console.WriteLine("CadenaB --> {0}", lsCadB)

Código fuente 305

• Compare( ). Este método compartido compara dos cadenas, y devuelve un valor menor de cero, si la primera cadena es menor que la segunda; cero si ambas cadenas son iguales; y

mayor de cero, si la primera cadena es mayor. Ver el Código fuente 306.

Dim lsCompara1 As String Dim lsCompara2 As String Dim liResultaComp As Integer Console.WriteLine("Introducir primera cadena a comparar") lsCompara1 = Console.ReadLine() Console.WriteLine("Introducir segunda cadena a comparar") lsCompara2 = Console.ReadLine()

liResultaComp = String.Compare(lsCompara1, lsCompara2) Select Case liResultaComp

Case Is < 0 Console.WriteLine("Primera cadena es menor") Case 0 Console.WriteLine("Las cadenas son iguales") Case Is > 0 Console.WriteLine("Primera cadena es mayor") End Select

Código fuente 306

• Equals( ). Compara el objeto con una cadena pasada como parámetro, y devuelve un valor lógico, que indica si las cadenas son o no iguales. Ver el Código fuente 307.

Dim lsCadInicial As String Dim lsCadComparar As String lsCadInicial = "Prueba" Console.WriteLine("Introducir una cadena a comparar con la cadena inicial") lsCadComparar = Console.ReadLine() If lsCadInicial.Equals(lsCadComparar) Then

Console.WriteLine("Las cadenas son iguales") Else Console.WriteLine("Las cadenas son diferentes") End If

Código fuente 307

© Grupo EIDOS 21. Aplicando un enfoque enteramente OOP en el código