Está en la página 1de 9

Strings

Programación
Orientada a
Objetos

1
Cadena de caracteres en Java
(Strings)
El valor de una String Introducción
es un conjunto de
caracteres delimitados
por comillas (Bailey, En Java los caracteres se almacenan en contenedores que pueden tener dos
2000). tipos de datos, el char que es primitivo y que almacena un número con el
código del carácter almacenado y el tipo de dato de referencia String, que
es una clase provista en las bibliotecas del lenguaje y que permite
almacentar conjuntos de caracteres con mayor facilidad de uso y
aprovechando los métodos que tiene una clase de Java.

Las cadenas de caracteres, String, juegan un rol muy importante soportando


la comunicación textual entre las computadoras y la gente. También,
algunos programas realizan cálculos usando objetos de la clase String. Por lo
tanto, las características del manejo de Strings son importantes para los
programadores (Bailey, 2000).

Los caracteres especiales (tabulación, nueva línea, etc.) son representados


por secuencias de escape. Las secuencias de escape pueden
aparecer en variables de tipo char, pero se usan más frecuentemente en las
Strings.

Operaciones básicas con Strings


Todo los lenguajes de programación de alto nivel manipulan cadenas y Java
no es la excepción. Sin embargo, el manejo que hace Java de las cadenas de
caracteres parece un tanto antinatural. Es por eso que recomendamos al
lector leer cuidadosamente esta lectura.

Quizás la operación más importante en las variables de tipo String es la de


pegar dos cadenas, que llamaremos concatenación. En Java la
concatenación se hace con el operador +, como vemos en la siguiente figura:

Figura 1: Uso de Strings

Fuente elaboración propia.

2
Debemos decir que al ser un objeto de la clase String, un objeto de esta clase
no puede ser modificado. Lo que hacemos, por ejemplo con la
concatenación, es crear nuevos objetos Strings con el cambio requerido:

Figura 2: Operación de concatenación de Strings

Fuente: elaboración propia.

Esto muestra a uno de los principales usos de la concatenación, que es


generar expresiones impresas complicadas a partir de diversos valores de
tipo String. Una propiedad interesante es que Java tiene la capacidad de
convertir todo tipo en String. Para los tipos primitivos, la String
correspondiente es la representación legible del valor del tipo primitivo
elegido. Para los objetos, Java llama al método toString (un método definido
para todos los objetos) que explícitamente construye una cadena String a
partir del valor actual del objeto. Esto puede parecer una característica
extraña del lenguaje, sin embargo, es bastante útil para el debugging
(detección y corrección de errores), pues podemos saber el estado de las
variables imprimiéndolas directamente. Por ejemplo:

Figura 3: Mostrando en String a un objeto tipo Line creado con dos objetos
Pt

Fuente: elaboración propia.

3
Imprime los puntos iniciales y finales del segmento Línea definido

Figura 4: Resultado de la ejecución del código de Figura 3

Fuente: elaboración propia.

Tú puedes usar la concatenación como un atajo para convertir tipos


arbitrarios en su representación String: solo concatenas el objeto a la cadena
vacía. Siempre que uno de los operandos de + es una String, el resultado es
la concatenación de las Strings correspondientes a ambos operandos. Para
determinar la longitud de una cadena de caracteres, es decir, el número de
caracteres de la cadena, podemos aplicar el método length. Como un
ejemplo de su uso, el siguiente método genera, a partir de un carácter c, una
cadena de longitud n con todos los caracteres iguales a c.

Figura 5: Función rep que genera una cadena a partir de un char

Fuente: elaboración propia.

La siguiente llamada a rep imprime una lÍnea de ochenta asteriscos:

Figura 6: Resultado de la ejecución del código de la Figura 5

Fuente elaboración propia.

4
Indizando cadenas

Hemos visto cómo construir una cadena a partir de una serie de caracteres.
Ahora consideraremos formas de desarmar una cadena. La herramienta
principal es el método charAt. Este método le permite al programador
recuperar un carácter de una cadena. Para hacerlo, debemos darle al
método chatAt una posición o índice. El índice del primer carácter en un
arreglo String es cero y se incrementa de a uno hacia la derecha (ver figura
7).

Figura 7: Organización en índices de un arreglo String con el método charAt

Fuente elaboración propia.

Supongamos que estás interesado en generar un titular donde las letras


aparezcan intercaladas con espacios. Por ejemplo, dado el argumento Hola,
queremos generar el valor H o l a. La siguiente función genera una String
como deseamos:

Figura 8: Manipulación de Strings

Fuente: elaboración propia.

Podemos usar la función anterior para estirar nuestro titular:

System.out.println(">"+headline("NEWS FLASH! ")+"<");

El resultado será:

5
>N E W S F L A S H ! <

Observa el espacio entre ! y < . Esto se debe a que agregamos un espacio


después del signo de admiración y antes de la comilla.

La indización de caracteres en Strings se utiliza comúnmente para recorrer


los caracteres a lo largo de la cadena y hacer alguna acción, en base a que se
cumpla determinada condición sobre el carácter que está siendo
considerado. En el siguiente ejemplo de método determinamos si hay un
espacio dentro de la cadena:

Figura 9: Búsqueda de un espacio dentro de un String

Fuente: elaboración propia.

Subcadenas
Algunas veces es necesario extraer porciones de una String.
Supongamos, por ejemplo, que es leída una línea de texto con varias
palabras. Para tener acceso a cada una de esas palabras como cadenas
separadas, debemos ser capaces de extraer subcadenas. Java provee varios
métodos para trabajar con subcadenas, llamados substring. La forma más
simple del método toma un índice inicial (un entero) y devuelve la
subcadena que comienza con el índice indicado. Veamos unos ejemplos:

Figura 10: Extracción de subcadenas dentro de un String

Fuente: elaboración propia.

Una forma alternativa toma dos parámetros: el índice del primer carácter de
la subcadena y el índice de la primera posición que sigue a la subcadena.

6
Figura 11: Diferentes argumentos de Substring y su resultado

Fuente: elaboración propia.

El valor del segundo parámetro se ha elegido así para que la diferencia entre
los parámetros sea la longitud de la subcadena.
Dadas las dos formas del método substring, podemos elaborar métodos para
omitir una subcadena.
El siguiente método, llamado omit, sirve para omitir la parte final de una
cadena a partir de un índice i:

Figura 12: Método que toma los primeros elementos de un String

Fuente: elaboración propia.

Comparación de cadenas

Con tipos de datos primitivos, los operadores ==, < y > son los responsables
de establecer un orden entre valores. Al ser una clase, estos operadores no
aplican para Strings. Para comparaciones, cuentas con el método equals,
que es el responsable de controlar si dos cadenas son iguales carácter por
carácter. El orden de las cadenas puede ser verificado con el método
compareTo. El orden que se considera es el orden lexicográfico o del
diccionario, es decir que cuando comparamos dos cadenas, se hace la
comparación de caracteres del mismo índice, comenzando por el primero.
La primera diferencia en los valores ASCII de los caracteres determina la
relación entre las cadenas. Por ejemplo:

1 "perro".compareTo("pero")

Este devolverá un valor que es más grande que cero, pues la cadena de la
izquierda es más grande que la derecha: los tres primeros caracteres son
iguales, pero cuando se compara el cuarto, la r es más grande que la o. La
magnitud del valor retornado por el método en general no tiene una
interpretación útil.

Cuando hacemos la siguiente comparación:

7
1 "come".compareTo("comera")

El valor resultante es menor que cero. Si durante la comparación es


encontrado el final de la cadena, y hasta aquí todos los caracteres son
iguales, entonces si la otra cadena tiene más caracteres, se considera mayor
a la cadena más larga. Como vemos, si nos restringimos a las palabras
escritas en minúscula, el método compareTo usa el orden del diccionario. Lo
mismo vale si utilizamos exclusivamente palabras mayúsculas. Las
dificultades (intuitivas) comienzan cuando se comparan palabras que
pueden contener mayúsculas y minúsculas mezcladas. En el orden de ASCII
toda letra mayúscula es menor que cualquier minúscula.

En general, si estamos interesados en verificar si la String s es menor que la


String t, debemos hacer:
1 s.compareTo(t) < 0

Mientras que un menor o igual a se obtiene con:

2 s.compareTo(t) <= 0

Luego de ver solo algunos ejemplos de las tantas funcionalidades asociadas


a la clase String para manejar el contenido de los objetos de este tipo,
finalizamos la lectura.

8
Referencias
Bailey, D. A., y Bailey, D. W. (2000). Strings [trad. por Alejandro
Tiraboschi]. En D. A. Bailey, Java Elements: Principles of Programming in
Java (pp. 185-200). Boston, MA: Mc Graw Hill.

También podría gustarte