Saltar la navegación

2.- Cadenas de caracteres.

Caso práctico

Ana está asustada, le acaban de asignar una nueva tarea y le acaban de enviar por correo el formato del archivo que tiene que procesar. El archivo tiene un formato concreto, un tanto extraño. Primero tiene una cabecera con información general del pedido, y luego tiene los artículos del pedido, cada uno en una línea diferente. ¿Podrá realizar la tarea encomendada?. En este momento lo que le preocupa es cómo evaluar las líneas del pedido, mas adelante se encargará de estudiar cómo se puede leer el contenido del fichero y procesarlo.

La empresa recibe los pedidos siguiendo un modelo normalizado. En realidad se trata de una pequeña aplicación web que al rellenar un formulario, envía un correo electrónico con la información siguiendo una estructura fija. A continuación puedes ver un ejemplo:

Persona utilizando un ordenador de mano.
ITE idITE=160222 (CC BY-NC)
## PEDIDO ##
Número de pedido: { 20304 }
Cliente: { Muebles Bonitos S.A. }
Código del cliente: { 00293 }
Dirección de factura: { C/ De en frente, 11 }
} Dirección de entrega: { C/ De al lado, 22 }
Nombre del contacto: { Elias }
Teléfono del contacto: { 987654321 }
Correo electrónico del contacto: { mail@mail1234.com }
Fecha preferente de entrega: { 19/11/2012 }
Forma de pago: { Transferencia }
## ARTICULOS ##
{ Código Artículo | Descripción | Cantidad }
{ 0001231 | Tuercas tipo 1 | 200 }
{ 0001200 | Tornillos tipo 1 | 200 }
{ 0002200 | Arandelas tipo 2 | 200 }
## FIN ARTICULOS ##
## FIN PEDIDO ##

Como puedes observar, el pedido tiene una estructura fija, y solamente cambian los datos que están entre llaves. El resto del texto es fijo, dado que como se ha dicho antes, el pedido lo genera una aplicación web, y lo envía por correo electrónico al cliente.

Cuando un cliente solicita un pedido a esta empresa, no puede poner en ningún campo los símbolos "{", "}", ni "|", porque entonces entraría en conflicto con el formato enviado por correo y daría problemas, así que se optó por impedir que el cliente pudiera poner dichos caracteres extraños. Esto garantiza que cada campo del pedido se va a poder leer adecuadamente.

Lo más conflictivo, es la sección de artículos del pedido, en su primera parte, tiene una especie de cabecera que ayuda a identificar que es cada una de las columnas. Y después, tiene tantas líneas como artículos tenga el pedido, si tiene 100 artículos, tendrán 100 líneas que incluirán: código del artículo, descripción del artículo y la cantidad.

Fotografía que muestra la imagen de una cadena.
ITE. Pedro García Barbudo (CC BY-NC)

Probablemente, una de las cosas que mas utilizarás cuando estés programando en cualquier lenguaje de programación son las cadenas de caracteres. Las cadenas de caracteres son estructuras de almacenamiento que permiten almacenar una secuencia de caracteres de casi cualquier longitud. Y la pregunta ahora es, ¿qué es un carácter?

En Java y en todo lenguaje de programación, y por ende, en todo sistema informático, los caracteres se codifican como secuencias de bits que representan a los símbolos usados en la comunicación humana. Estos símbolos pueden ser letras, números, símbolos matemáticos e incluso ideogramas y pictogramas.

La codificación es la representación interna de cada carácter dentro de un ordenador. Cada símbolo usado en la comunicación humana tiene que traducirse en una serie de unos y ceros que puedan almacenarse en el ordenador, dado que un símbolo, como tal, no puede almacenarse. Después será el software del ordenador el encargado de transformar el código binario en una representación gráfica reconocible por el ser humano. Las codificaciones más extendidas son American Standard Code for Information Interchange.ASCII International Organization for Standardization885915, y la más usada hoy día, 8-bit Unicode Transformation Format.UTF-8, recogida dentro las codificaciones del estándar Unicode (UTF8, 16-bit Unicode Transformation Format.UTF-16 y Unicode Transformation Format.UTF-32).

Imagen, ilustración o dibujo que en algunos idiomas puede tener un significado y que pueden ser leídos, como por ejemplo los ideogramas del egipcio antiguo, del chino o del japonés.

Signo, generalmente a modo de dibujo, que representa una idea, un símbolo común o una figura real. Un ejemplo de pictograma son los emoticonos, con ellos se expresan emociones.

Para saber más

Si quieres puedes profundizar en la codificación de caracteres leyendo el siguiente artículo de la Wikipedia.

Codificación de caracteres.

La forma más habitual de ver escrita una cadena de caracteres es como un literal de cadena. Consiste simplemente en una secuencia de caracteres entre comillas dobles, por ejemplo: "Ejemplo de cadena de caracteres".

En Java, los literales de cadena son en realidad instancias de la clase String, lo cual quiere decir que, por el mero hecho de escribir un literal, se creará una instancia de dicha clase. Esto da mucha flexibilidad, puesto que permite crear cadenas de muchas formas diferentes, pero obviamente consume mucha memoria. La forma más habitual es crear una cadena partiendo de un literal:

String cad="Ejemplo de cadena";

En este caso, el literal de cadena situado a la derecha del igual es en realidad una instancia de la clase String. Al realizar esta asignación hacemos que la variable cad se convierta en una referencia al objeto ya creado. Otra forma de crear una cadena es usando el operador new y un constructor, como por ejemplo:

String cad=new String ("Ejemplo de cadena");

Cuando se crean las cadenas de esta forma, se realiza una copia en memoria de la cadena pasada por parámetro. La nueva instancia de la clase String hará referencia por tanto a la copia de la cadena, y no al original.

Reflexiona

Fijate en el siguiente línea de código, ¿cuantas instancias de la clase String ves?

String cad="Ejemplo de cadena 1"; cad="Ejemplo de cadena 2"; cad=new String("Ejemplo de cadena 3");