jueves, 9 de marzo de 2017

La Clase String

Introducción

Los ejemplos de código los he desarrollado basándome en Visual Basic .NET aunque bien pueden ser aplicados para Visual C#.

Descripción General

La clase String es utilizada para dar tipo de datos a una variable de forma literal, representando los caracteres alfanuméricos y otros tipos de caracteres especiales, aceptados por los diversos objetos que permiten la escritura y lectura de los mismos. Por ejemplo, los cuadros de textos, la consola, etc.
La clase String es una clase que se especializa del tipo de datos primitivo Char. El tipo de datos primitivo Char solo acepta un solo carácter como manejo en sus variables asignadas mientras que la clase String no tiene limitación alguna. Algunos suelen decir que la clase String no es más que un vector extendido de tipos de datos primitivos Char. Sin embargo, esta definición se queda corta. Más bien, se trata de una mera interpretación pues la clase String tiene más que ofrecernos que un simple vector extendido. Veamos más de cerca algunas de sus propiedades, métodos y funciones útiles para su uso eficiente.

Método Estático Format

Quizá una de las funciones más importantes que posee la clase String es el uso del método Format dado su versatilidad e infinidad de usos como salida de datos y combinación de información de entradas, es la de permitir la combinación de diversos tipos de variables de tipos de datos entrantes con datos existentes. En breve, lo que logra es una unificación final de todos estos datos a través de una cadena final única. Veamos algunos ejemplos al respecto.
Dim nombrediasemana() As String = { _
“domingo”, “lunes”, “martes”, “miércoles”, _
“jueves”, “viernes”, “sábado” _
}
Dim nombremes() As String = { _
“enero”, “febrero”, “marzo”, “abril”, “mayo”, _
“junio”, “julio”, “agosto”, “septiembre”, _
“octubre”, “noviembra”, “diciembre” _
}
Dim saludo As String = “Buenos días”
Dim dia As Integer = Date.Now.Day.ToString()
Dim diasem As String = Date.Now.DayOfWeek
Dim mes As Integer = Date.Now.Month
Dim anio As Integer = Date.Now.Year
Console.WriteLine(“{0}. {1} {2} de {3} de {4}”, _
saludo, nombrediasemana(diasem), dia, nombremes(mes – 1), anio _
)
Console.Read()
Las variables vectores usadas para los días de la semana y los meses es utilizada para que se coloque el literal en lugar del valor numérico que es un valor que maneja la máquina internamente. Como puedes ver, cada una de las variables es pasada a los argumentos del método Format. El primer argumento formado por una cadena posee una serie de máscaras enumeradas como {0}, {1}, {2},… Estas son utilizadas para pasar los valores desde las variables. El resto de los argumentos son las variables que pasan valores al método y que luego Format se encarga de unificar como unificación del contexto en una cadena final.

Máscaras Especiales – Números Enteros y No Enteros, Fechas y Truncamientos

Otro gran aspecto interesante de las máscaras es la posibilidad de especializarlas. Por ejemplo, podemos hacer que nuestras máscaras permitan personalizar los resultados mostrados en pantalla. por ejemplo, en el caso de números no enteros limitar la cantidad de dígitos flotantes, truncar una cadena literal si es demasiada larga, establecer tabulaciones como salto entre diversos ítems, etc. Veamos el siguiente ejemplo de un hipotético cálculo demográfico de algunas ciudades de los EEUU.
Dim cities() = { _
Tuple.Create(“Los Angeles”, #1/1/1940#, 1504277, #1/1/1950#, 1970358),
Tuple.Create(“New York”, #1/1/1940#, 7454995, #1/1/1950#, 7891957),
Tuple.Create(“Chicago”, #1/1/1940#, 3396808, #1/1/1950#, 3620962),
Tuple.Create(“Detroit”, #1/1/1940#, 1623452, #1/1/1950#, 1849568)}
Dim header As String = String.Format( _
“{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}”, _
“Ciudad”, “Año”, “Población”, “Densidad (%)” _
)
Console.WriteLine(header)
Console.WriteLine()
Dim output As String
For Each city In cities
output = String.Format( _
“{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P2}”, _
city.Item1, city.Item2, city.Item3, city.Item4, city.Item5, _
(city.Item5 – city.Item3) / city.Item3)
Console.WriteLine(output)
Next
Console.Read()
El resultado de este ejemplo muestra una tabla con una serie de valores. La clase Tuple es utilizada para crear una serie de tuplas para formar una tabla final de datos. No obstante, por el momento, analicemos algunos puntos de las máscaras que son de nuestro interés.
La variable header establece en sus máscaras los límites de cada columna de la tabla. La máscara se divide en dos números mediante la separación de una coma. El primer número es el índice de la variable mientras que el segundo es la limitación de caracteres de presentación en pantalla. Por ejemplo, la máscara escrita como {0,12} establece una columna con una limitación de doce caracteres. Si la cadena tiene más caracteres estos se truncarán. La máscara siguiente es {1,8} esto determina que la siguiente columna tendrá una limitación de ocho caracteres y así sucesivamente con el resto de las máscaras.
Los números enteros representados en la cantidad de habitantes para la población, son mostrados con sus puntos de millares y millones utilizando las máscaras como {2,12:N0} y {4,12:N0} respectivamente. El primer número se trata del índice de la variable mientras que el segundo número, es decir el doce junto a la nomenclatura “:N0”, es utilizado para indicarle a la máscara que agregue los puntos para dividir millares de millones en la expresión de cadena literal del número.
El número no entero que es utilizado para representar los valores de densidades en forma de porcentuales, hace uso de los números flotantes con una limitación de dos caracteres. Esto se logra con la siguiente máscara {5,14:P2}. El primer número es el valor de índice de la variable mientras que el segundo número establece el máximo valor representativo en pantalla de caracteres flotantes y la nomenclatura “:P2” hace mención a una presentación del valor flotante a dos dígitos.
Por último, tenemos la máscara que se usa para representar el año tomándolo desde una fecha dada. La máscara solo se limita a mostrar. Para eso hace uso de la siguiente máscara {1,8:yyyy} donde el primer número es el índice de la variable mientras que el segundo establece la cantidad de caracteres máximo de presentación y el uso de las cuatro “Y”, es para tomar el año. Si se necesitara tomar el mes se recurría a la letra M, siendo una o dos MM la presentación de los meses de forma numeral mientras que tres M sería el nombre del mes abreviado y con cuatro M el nombre de mes entero. Si se necesitara tomar los días, se recurre a la letra d “minúscula”. Si se incluye dos letras “d”, se representará el día en forma numérica, con tres letras “d” se obtiene el nombre de la semana abreviado y si se aplican cuatro “d” se obtiene el nombre de la semana completo. Un dato interesante es que cuando se usan dos “d” el día es representado como “01” mientras que con una “d” el número será “1”. Este caso es igual para el mes. Por último y parar cerrar, el año puede ser representado como década. Para ello tan solo deberías escribir dos “y” para tal caso. Veamos un ejemplo final para todo esto.
Console.WriteLine(String.Format( _
“{0,25}”, “Fecha del día actual”) _
)
Console.WriteLine(String.Format( _
“{0,25:dddd, dd ‘d’e MMMM ‘d’e yyyy}”, #1/1/2015#) _
)
Console.Read()
Observa que en la máscara se detalla para del literal junto a sus máscaras para representar la fecha larga literal. La letra “d” en algunas partes del texto se encierra entre apóstrofos. Esto se hace debido a que la letra “d” es una palabra reservada para representar los días. Para eludir la función de la misma, se la encierra entre comillas. Esto es una forma equivalente a rotar de funcionalidad a expresión literal de un simple carácter del alfabeto.

Máscaras Especiales – Representación de Valores Monetarios

En muchas ocasiones necesitamos representar los valores monetarios de forma directa. El uso de las máscaras nos puede ayudar en este contexto. Veamos el siguiente ejemplo que muestra una lista de precios de unos productos enlistados.
Dim products() = { _
Tuple.Create(“1”, “Jabón Líquido”, 23.56), _
Tuple.Create(“2”, “Shampoo”, 12.31), _
Tuple.Create(“3”, “Enjuague”, 18.46), _
Tuple.Create(“4”, “Jabón Tocador”, 12.28) _
}
Dim titles As String = String.Format( _
“{0,4}{1,15}{2,8}”, “ID”, “Producto”.ToUpper(), “Precio”.ToUpper() _
)
Console.WriteLine(titles)
For Each product In products
Dim src As String = String.Format( _
“{0,4}{1,15}{2,8:C2}”, product.Item1, _
product.Item2.ToUpper(), product.Item3 _
)
Console.WriteLine(src)
Next
Console.Read()

Máscaras Especiales – Otros Recursos Más

Las máscaras presentan una infinidad de mecanismos de presentación de la información en pantalla. También se puede acudir al uso de las bases numéricas como decimales y hexadecimales. Entre otras características, las de personalizar las máscaras e introducirlas en el contexto del método Format. En breve, el uso de sus combinaciones resulta prácticamente en ilimitados.

Propiedades, Funciones y Métodos Especiales de la Clase String

Un método lo hemos descripto en la primera parte de este extenso anexo. Sin embargo, la clase String tiene muchos recursos que resultan prácticamente imposibles describirlos todos sin pecar de omisión y por otro lado, haría que este anexo fuera interminable. Al menos, trataré de citarte los más utilizados y relevantes en la mayoría de los usos genéricos. Veamos este gran y extenso ejemplo en el que se contemplan la mayoría de estos recursos mencionados.
Dim cadena As String = ” esto es algo ”
Dim totalDeCaracteresMasEspacioEnBlanco As String
Dim sacaEspaciosRodeandoCadena As String
Dim todoMayusculas As String
Dim sacaCaracteresDeLaIzquierda As String
Dim sacaCaracteresDeLaDerecha As String
Dim estoHaCambiado As String
Dim divide() As String
Dim precio As Decimal = 34.45
totalDeCaracteresMasEspacioEnBlanco = cadena.Length.ToString()
todoMayusculas = cadena.ToUpper()
sacaEspaciosRodeandoCadena = cadena.Trim()
sacaCaracteresDeLaDerecha = cadena.Substring(1, 4)
sacaCaracteresDeLaIzquierda = cadena.Substring(cadena.Length – 5)
estoHaCambiado = cadena.Replace(“algo”, “extenso”)
divide = cadena.Split(” “)
Console.WriteLine(“Oración”)
Console.WriteLine(sacaEspaciosRodeandoCadena)
Console.WriteLine(“Oración en Mayúsculas”)
Console.WriteLine(todoMayusculas)
Console.WriteLine(“Oración en Minúsculas”)
Console.WriteLine(todoMayusculas.ToLower())
Console.WriteLine(“Cantidad de Caracteres: {0}”, _
totalDeCaracteresMasEspacioEnBlanco)
Console.WriteLine( _
“Toma {0} caracteres desde la izquierda. Omite blancos y queda:”, _
cadena.Substring(1, 4).Length _
)
Console.WriteLine(sacaCaracteresDeLaDerecha)
Console.WriteLine( _
“Toma {0} caracteres desde la derecha. Omite blancos y queda:”, _
cadena.Substring(cadena.Length – 5).Length _
)
Console.WriteLine(sacaCaracteresDeLaIzquierda)
Console.WriteLine( _
“Cambiando ({0}) por esto ({1})”, _
sacaEspaciosRodeandoCadena, estoHaCambiado _
)
Console.WriteLine(“Esto se divide entre líneas:”)
Console.WriteLine(divide(1))
Console.WriteLine(divide(2))
Console.WriteLine(divide(3))
Console.WriteLine(“Convierte este valor 34.45 en valor monetario”)
Console.WriteLine(“{0}”, precio.ToString(“c”))
Console.WriteLine(“Anexando a la oración una frase más:”)
Console.WriteLine(cadena.Insert(cadena.Length – 1, ” y mucho más”).Trim())
Console.WriteLine(“Anexando parte de la oración:”)
Console.WriteLine(cadena.Insert(5, ” en definitiva”).Trim())
Console.Read()

Propiedad Lenght

La propiedad Lenght es utilizada para obtener el número máximo de caracteres de una cadena. Esto incluye los espacios vacíos si los hubiere. Veamos un ejemplo de uso, tanto en Visual Basic 6 como en actual Visual Basic .NET.
Visual Basic 6Visual Basic .NET
tamaño = Len(variable)tamaño = variable.Lenght

Funciones Trim(), TrimStart() y TrimEnd()

La función Trim() permite eliminar los espacios en blanco que rodean una cadena de caracteres, palabra o una simple letra. Tú puedes usarla de dos modos distintos. Una de las formas que te muestro como ejemplo, es cuando se lo utilizaba en Visual Basic 6 y otro como se lo usa actualmente, como lo veras en el código de ejemplo que deje aquí y como debieras usarlo siempre en Visual Basic .NET.
Visual Basic 6Visual Basic .NET
Trim(variable)variable.Trim()
También y complementariamente a esta función Trim(), contamos con la función que corta solo al principio de una cadena TrimStart() como así aquella que corta al final TrimEnd().

Funciones ToLower() y ToUpper()

La función ToLower() es utilizada para forzar a toda una cadena de caracteres a que se pase a minúsculas mientras que la función ToUpper() resulta ser utilizada para forzar que toda la cadena se pase a mayúsculas respectivamente. A continuación, dejo el modo en cómo se lo usaba antiguamente y actualmente.
Visual Basic 6Visual Basic .NET
UCase(variable)variable.ToUpper()
LCase(variable)variable.ToLower()

Función Substring()

En muchas ocasiones el proceso de truncamiento de las cadenas puede ser bastante necesario en diversos escenarios. Por ejemplo, quizá es necesario truncar una cadena para acomodarla en una columna de datos o quizá tomar parte de la cadena para crear un proceso de filtrado, etc. La función Substring() es ideal para truncar parte de la cadena de una variable. Veamos un ejemplo de uso.
Visual Basic 6Visual Basic .NET
Mid(variable, inicio, tamaño)variable.Substring(inicio, tamaño)

Función Split()

La función Split() permite dividir en trozos una cadena de literales. Es ideal para separar pedazos de una cadena en función a un delimitador determinado. Cada trozo obtenido de la división es almacenado en un vector de modo de que cada parte de la cadena original troceada pueda ser accedida de forma directa y fácil. Veamos un ejemplo.
Visual Basic 6Visual Basic .NET
troceado = Split(variable, “carácter”)troceado = variable.Split(“carácter”)

Luego del troceado de la cadena original, tu puedes acceder a cada parte de la misma mediante el acceso a los índices del vector de la variable troceado como troceado(0)troceado(1), etc.

Función Insert()

La función Insert() te permite anexar caracteres o literales a una cadena de literales. Podrías agregar más texto al final de la cadena o intercalarlo entre medio o donde sea. Veamos un ejemplo.
Visual Basic 6Visual Basic .NET
No existentevariable.Insert(espacio, “anexar aquí”)

Función Replace()

La función Replace() puede ser utilizada para reemplazar una serie de cadenas, palabras o caracteres dentro de una variable de tipo cadena. Veamos un ejemplo.
Visual Basic 6Visual Basic .NET
Replace(
   variable, “palabra_vieja”, “palabra_nueva”
)
variable.Replace(
       “palabra_vieja”, “palabra_nueva”
)

Función ToString()

Esta es una de las funciones más importantes y utilizadas. Tiene muchos fines de uso pero el más genérico y utilizado es para la adaptación de datos como casteo. Esta función admite redefinición de sus datos, a través de la herencia de clases, lo que la convierte en poderosa. En el ejemplo que has visto recientemente solo se lo utiliza para adaptar un valor numérico a una expresión literal aunque lleva consigo además el símbolo monetario. Por tanto, en este caso en particular, está haciendo uso de una conversión o casteo más una adaptación de formato. Veamos el ejemplo dado.
Visual Basic 6Visual Basic .NET
Similar al conversor aunque con muchas diferencias funcionales. Este convierte pero no adapta a formatos.
CStr(variable)
fecha.ToString(“MMMM d, yyyy”) ‘Fecha
‘Valor a Formatear 99873654,2232result = value.ToString(“f4”);result = value.ToString(“f2”);formatInfo.NumberDecimalSeparator = “##”;Resultado 99873654##223218result = value.ToString(“f6”); ‘Otros Formatos de Monedas‘Resultado: $ 99.873.654,22result = value.ToString(“C2”);variable.ToString(“c”) ‘Moneda
numberFormat.CurrencyGroupSeparator = @”@@”;‘Símbolo decimalnumberFormat.CurrencySymbol = “?”;             result = value.ToString(“c4”);
El uso de ToString() si parámetros es ideal para proceder con la conversión o los casteos de datos.

No hay comentarios:

Publicar un comentario