Una de las clases que más utilizo cuando estoy programando en Arduino es la clase String. Los String o cadenas de caracteres son un tipo de datos que brindan una gran versatilidad en tiempo de ejecución. En este artículo voy a explicar las principales generalidades de esta clase y todo lo que podemos lograr con ella.
¿Qué es un String o cadena de caracteres?
Las cadenas de caracteres o string son tipos de datos que permiten almacenar caracteres. Se diferencian de los «char» porque permiten almacenar más de un solo caracter. Podemos guardar palabras, frases, números, caracteres especiales o la combinación de estos elementos. Veamos algunos ejemplos de declaraciones de Strings:
1 2 3 4 5 6 |
String str1 = "hola"; String str2 = "hola mundo"; String str3 = "12345"; String str4 = "hola usuario 12345"; String str5 = "*/-+"; String str6 = "hola usuario ++**53245**++"; |
Como ven, estas declaraciones incluyen números, palabras, frases, caracteres especiales y combinaciones. La característica principal de los datos tipo String es que se expresan entre comillas.
Transformar de String a números
En Arduino se ha incluido algunos métodos para la transformación de datos tipo String a datos numéricos. Por ejemplo:
1 2 |
String str = "1234"; int num = str.toInt(); |
De esta forma es posible cambiar de un tipo de dato a otro. Por supuesto que este método no funcionará si se intenta transformar caracteres no numéricos.
Concatenación de caracteres
La concatenación consiste en unir dos cadenas de caracteres en una sola. Es muy útil para cuando se quieren construir secuencias de código. Veamos un ejemplo:
1 2 3 4 5 6 |
String str1 = "hola"; String str2 = "mundo"; String str3 = ""; str3 += str1; str3 += " "; str3 += str2; |
Si se imprime el valor de str3 será «hola mundo». Lo que se hizo fue crear una cadena con el valor «hola». Luego se crea una cadena con la variable «mundo». Después se crea una variable tipo String vacía. A esa variable se le agrega el valor de str1 (es decir, «hola») utilizando el operador de concatenación +=. Después se agrega un espacio vacío y por último se concatena la variable str2.
En lo personal utilizo mucho esta operación para construir cadenas de caracteres. Es especialmente útil cuando se trabaja con bases de datos y/o con clientes de http puesto que en ocasiones necesitamos «pasarle» parámetros a un método en específico y es necesario combinar valores con instrucciones de texto.
Descomposición en caracteres
Cuando se trabaja con datos tipo String es posible descomponer las cadenas de caracteres en una serie de caracteres simples. Para esto se utiliza comúnmente el ciclo «for» en conjunto con el método length() asociado a la clase String.
Cuando se utiliza el método length() obtenemos la cantidad de caracteres guardados dentro de una variable String. De esta forma, utilizamos el ciclo for y el método charAt() para «recorrer» la cadena de caracteres y obtener cada uno de los caracteres que forman la cadena.
1 2 3 4 |
String str = "hola mundo"; for (int i = 0; i < str.length(); i++) { Serial.println(str.charAt(i)); } |
Este pequeño fragmento de código produciría como salida:
1 2 3 4 5 6 7 8 9 10 |
h o l a m u n d o |
El método charAt(int pos) se encarga de devolver los caracteres según su posición dentro del String. La posición 0 es el primer caracter de izquierda a derecha.
Creación de subcadenas
Las subcadenas son partes de una cadena de caracteres. Por ejemplo, si tenemos la cadena «hola mundo» y queremos extraer la palabra «hola», hacemos lo siguiente:
1 2 |
String str = "hola mundo"; String subStr = str.substring(0, 4); |
El valor que asumirá la variable subStr es «hola», puesto que fue extraída como un substring de la variable str comprendida entre los índices 0 y 4.
Reemplazos en cadenas
Los reemplazos permiten cambiar una parte de una cadena por otra. Por ejemplo, si tenemos la cadena «hola_mundo_para_todos_los_usuarios» y queremos cambiar los underscore (_) por espacios en blanco, hacemos lo siguiente:
1 2 |
String str = "hola_mundo_para_todos_los_usuarios"; str = str.replace("_"," "); |
De esta forma, el valor final de la variable str será «hola mundo para todos los usuarios».
Cambiar caracteres entre mayúscula y minúscula
Es posible remplazar todos los caracteres de una cadena por mayúsculas o minúsculas. Para ello existen los métodos toUpperCase() y toLowerCase(). Veamos un ejemplo:
1 2 3 |
String str1 = "Hola Mundo"; String str2 = str1.toLowerCase(); String str3 = str1.toUpperCase(); |
De esta forma, el valor de str2 será «hola mundo» y el de la variable str3 será «HOLA MUNDO».
Localización de caracteres dentro de una cadena
La clase String cuenta con el método indexOf() que permite encontrar el índice en el cual se ubica cierto caracter. También es posible ubicar palabras. Veamos un ejemplo.
1 2 3 4 |
String str = "hola mundo"; int i = str.indexOf("hola"); int j = str.indexOf(" "); int k = str.indexOf("usuario"); |
En este ejemplo, la variable i tendrá el valor de 0, puesto que «hola» se encuentra en el índice 0, si se considera el primer caracter de la cadena como la posición 0. La variable j tendrá el valor de 5, puesto que el espacio vacío se ubica en la quinta posición, contando de izquierda a derecha y considerando la «h» como la posición cero. La variable k tendrá el valor de -1, puesto que la palabra usuario no existe dentro de la cadena de caracteres en cuestión.
El método indexOf() también puede aceptar un segundo parámetro con el cual se puede especificar el indice inicial en el cual se desea empezar a buscar un caracter.
1 2 |
String str = "hola mundo"; int i = str.indexOf("hola", 2); |
En este caso el valor de i será -1 puesto que se intenta buscar la cadena «hola» a partir del índice 2, lo cual devuelve un resultado nulo. La cadena «hola» debe buscarse desde el índice cero.
Conversión de bases numéricas
Con la clase String es posible convertir números de decimal a binario o a hexadecimal y vice versa. Veamos un ejemplo:
1 2 3 4 5 6 7 |
int num = 25; String hex = String(num, HEX); String bin = String(num, BIN); String oct = String(num, OCT); Serial.println(hex); Serial.println(bin); Serial.println(oct); |
Los resultados impresos en el Monitor Serie serían:
1 2 3 |
19 11001 31 |
19 sería el 25 en hexadecimal. 11001 es el resultado en binario y 31 en sistema octal.
Conclusiones
La clase String es, en definitiva, una herramienta muy útil para programar en Arduino. En lo personal trabajo mucho con Strings en mis códigos, aunque sin abusar de ellos. Cuando se declaran muchos Strings en los códigos en Arduino estamos ocupando una cantidad considerable de espacio de memoria, lo cual a veces puede causar que nuestro código ocupe demasiado espacio en la flash o en la SRAM y que nuestro programa tienda a fallar en tiempo de ejecución.
Esperamos que la información suministrada sea de utilidad para ustedes.
gracias profe