This is an old revision of the document!
Las cadenas de caracteres
\part*{Las cadenas de caracteres}
Las cadenas de caracteres se almacenan en java utilizando la clase \verb String . Java permite que utilicemos este tipo de dato como si tratara de un tipo primitivo pero realmente es una clase que, a parte de almacenar el valor de una cadena de caracteres, tiene numersosos métodos para operar con dicho valor y con otros relacionados.
\section{Extracción de un caracter particular}
Podemos extraer un caracter indicando simplemente su posición, y lo obtendremos como una variable de tipo \verb char . Obtendremos un error en caso de que no exista el caracter en la cadena.
\begin{lstlisting}[language=java] String cadena = “Cadena de texto”; char primerCaracter = cadena.charAt(0); System.out.println(primerCaracter); C \end{lstlisting} \section{Obtener la longitud de una cadena} Para obtener la longitud de una cadena utilizaremos el método \verb length() . Hay que tener en cuenta que devolverá el número de caracteres incluyendo los espacios. También podremos saber si una cadena está vacía con el método \verb isEmpty() . Recuerda que nunca será lo mismo que la cadena esté vacía a que no haya sido instanciada. \begin{lstlisting}[language=java] String cadenaVacia = “”; String cadenaNula; String cadenaNulaTambien = null; System.out.println(cadenaVacia.isEmpty()); true System.out.println(cadenaNula.isEmpty()); Error (Excepción NullPointerException) System.out.println(cadenaNulaTambien.isEmpty()); Error (Excepción NullPointerException) \end{lstlisting}
\begin{lstlisting}[language=java] String cadena = “esto es una cadena”; System.out.println(cadena.length()); 18 Podemos comprobar si la cadena está vacía (length() == 0) System.out.println(cadena.isEmpty()); false \end{lstlisting} \section{Subcadenas} Una subcadena es el fragmento que extraemos de una cadena más larga. La clase \verb String en Java proporciona diferentes formas de hacerlo a través de las diferentes sobrecargas del método \verb substring() dependiendo de los parámetros que se le pasen. Tendremos que tener en cuenta que la primera posición de una cadena será la posición 0 \begin{lstlisting}[language=java] String nombre = “Asociación Española de Programadores Informáticos”; Devuelve la subcadena desde la posición 10 en adelante String subcadena = nombre.substring(10); System.out.println(subcadena); Española de Programadores Informáticos Devuelve la subcadena entre dos posiciones dadas subcadena = nombre.substring(5, 10); System.out.println(subcadena); ación \end{lstlisting} \section{Comparación de cadenas} Las cadenas de texto, al tratarse de objetos, no pueden ser comparadas con el operador \verb == ya que dicho operador sobre dos objetos evaluará si tienen la misma dirección de memoria, pero no si contienen el mismo valor. Podemos tener dos cadenas con el mismo texto pero pueden ser diferentes objetos, por lo que el operador devolvería un significado erróneo. \begin{lstlisting}[language=java] String nombre = “Asociación Española de Programadores Informáticos”; String nombreCorto = “AEPI”; if (nombre.equals(nombreCorto)) { System.out.println(“Las dos cadenas son iguales”); } else { System.out.println(“Las dos cadenas de texto son diferentes”); } \end{lstlisting} \section{Cambiar las letras de mayúscula a minúsculas} También podemos pasar una cadena de texto a minúsculas o mayúsculas. La clase \verb String tiene métodos para realizar ambas operaciones, devolviendo siempre el resultado final. \begin{lstlisting}[language=java] String nombre = “Asociación Española de Programadores Informáticos”; String nombreMinusculas = nombre.toLowerCase(); System.out.println(nombreMinusculas); asociación española de programadores informáticos
String nombre = “Asociación Española de Programadores Informáticos”; String nombreMayusculas = nombre.toUpperCase(); System.out.println(nombreMayusculas); ASOCIACIÓN ESPAÑOLA DE PROGRAMADORES INFORMÁTICOS \end{lstlisting} \section{Búsqueda en una cadena} También podemos buscar subcadenas dentro de una cadena. Podremos buscar desde un caracter hasta una cadena de longitud indeterminada. \begin{lstlisting}[language=java] String nombre = “Asociación Española de Programadores Informáticos”; int posicion = nombre.indexOf(“Española”); if (posicion == -1) { System.out.println(“La palabra 'Española' no se encuentra en el nombre”); } else { System.out.println(“Se ha encontrado la cadena 'Española' en la posición ” + posicion); } \end{lstlisting} \section{Sustitución en una cadena} Podemos reemplazar fragmentos de la cadena de texto por otros que pasemos como parámetros al método \verb replace() , que devolverá la cadena resultante. \begin{lstlisting}[language=java] String nombre = “Asociación Española de Programadores Informáticos”; String busqueda = “Programadores”; String reemplazo = “Desarrolladores”; nombre = nombre.replace(busqueda, reemplazo); System.out.println(nombre); Asociación Española de Desarrolladores Informáticos \end{lstlisting}
\section{Dar formato a una cadena}
Si te has fijado, hasta ahora almacenamos en variables sólo el valor de algo, pero en ningún caso añadimos información de cómo queremos representar ese valor a la hora de mostrarlo en pantalla. Quizás sea un valor monetario, una fecha o cualquier otro valor que necesite una representación determinada. Para eso está el método \verb format() de la clase \verb String . Permite añadir formato a los valores de cualquier variable para mostrarlo al usuario, por ejemplo.
\begin{lstlisting}[language=java] float precio = 45.5;
Muestra el valor tal y como está almacenado System.out.println(precio); 45.5
Muestra el valor con dos decimales System.out.println(String.format(“%,2f”, precio)); 45.50
Muestra el valor con dos decimales siguiendo una notación concreta System.out.println(String.format(Locale.FRENCH, “%.2f”, precio)); 45,50
int valor = 45; Fuerza mostrar el valor utilizando 3 dígitos System.out.println(String.format(“%03d”, valor); 045 \end{lstlisting}
\section{Convertir una cadena de caracteres en un array de caracteres}
A veces es interesante obtener una cadena como un array de valores \verb char para operar con ellos de otra manera. La clase \verb String dispone del método \verb toCharArray() para convertir una cadena en un array de caracteres.
\begin{lstlisting}[language=java] String cadena = “AEPI”; char[] caracteres = cadena.toCharArray(); System.out.println(Arrays.toString(caracteres)); ['A', 'E', 'P', 'I'] \end{lstlisting} —- © 2019 Santiago Faci