Curso de Java. Manipulando cadenas. La clase String.
Hasta ahora, en lo que llevamos avanzado en el curso de java hemos visto y trabajado sobre tipos de datos numéricos (byte, int, double, etc ) y tipos de datos que trabajan con caracteres (char). Además, también hemos aprendido a crear objetos envoltorio sobre esos tipos de datos, que nos proporcionan numerosos métodos para trabajar con dichos tipos. Sin embargo no hemos visto todavía como podemos trabajar con string o cadenas de caracteres, que es una de las cosas mas importantes y utilizadas en los programas realizados en java.
Para trabajar con objetos String o cadenas java dispone de la clase String. Aunque ya hemos trabajado en algún ejemplo del curso de Java con esta clase String hasta ahora no la veíamos como clase propiamente dicha, mas bien la tratábamos como un tipo primitivo más.
En esta página entre otras cosas aprenderemos como crear objetos de la clase String y veremos también los principales métodos de la clase String que podemos utilizar para trabajar con cadenas de caracteres.
Declarar e inicializar una variable u objeto de la clase String.
Una variable de la clase String se declara como cualquier otro tipo de variable, de la siguiente forma:
1 | String cadena; |
Posteriormente para inicializar esta variable u objeto String ya declarada podemos proceder de dos formas:
1ª) Directamente asignándola una cadena de caracteres o string.
1 | cadena = "Hola soy una cadena"; |
2ª) Utilizando la palabra reservada new y llamando al constructor de la clase String.
1 | cadena= new String("Hola soy una cadena"); |
Cuando trabajamos con strings puede que necesitemos unirlas o concatenarlas, compararlas o recorrerlas de alguna manera. A continuación veremos estas acciones:
¿Como concatenar o unir cadenas o strings?
Hay varias formas de concatenar cadenas o Strings:
La primera es usando el operador de concatenación «+». El siguiente ejemplo muestra su fácil uso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package cadenasstring; /** * * @author codesitio.com */ public class CadenasString { public static void main(String[] args) { String nombre, apellido, domicilio, callePaseo; //inicializamos los String nombre="Pepe"; apellido="Gotera"; callePaseo="la calle"; domicilio="Villabotijos de Abajo"; System.out.println("Me llamo " +nombre+" "+ " "+apellido+" y vivo en "+callePaseo+" "+domicilio); System.out.println(); //Cuando la sentencia es muy larga hay que emplear el operador + y separar en lineas System.out.println("Me llamo " +nombre+" " + " "+apellido+" y vivo en " +callePaseo+" "+domicilio); } } |
En el ejemplo vemos que cuando la sentencia se alarga demasiado podemos separar en lineas distintas utilizando el operador de concatenación «+». Este código producirá la siguiente salida en consola:
La segunda forma de concatenar strings o cadenas es usando el método concat() de la clase String:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package cadenasstring; /** * * @author codesitio.com */ public class CadenasString { public static void main(String[] args) { String nombre, apellido, domicilio, callePaseo; //inicializamos los String nombre="Pepe"; apellido="Gotera"; callePaseo="la calle"; domicilio="Villabotijos de Abajo"; System.out.println("Me llamo ".concat(nombre).concat(apellido).concat(" y vivo en ").concat(callePaseo).concat(domicilio)); } } |
Podemos usar como argumento en el método concat una variable String o directamente una cadena de caracteres.
Este nuevo código producirá exactamente la misma salida en consola que el anterior:
Antes dijimos que una cadena, objeto o variable de la clase String una vez creada es inmutable. Viendo como actúa el método concat() puede parecer que modifica las variables o cadenas donde se aplica, pero no es así, el método concat y otros métodos de la clase string crean y retornan una nueva cadena dejando intacta la cadena original donde se aplican.
¿Porque en Java un String es inmutable?
La razón de que un String sea inmutable es que es un objeto de la clase string y en Java los objetos se pueden crear y destruir pero no modificar. Esta filosofía de protección de objetos hace que java sea un lenguaje compacto y seguro.
Lo que si podemos crear referencias a dichos objetos o strings y trabajar con ellos para conseguir determinados resultados.
Ejemplo que comprueba como un String es inmutable.
En el siguiente ejemplo confirmamos como un string es inmutable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package cadenasstring; /** * * @author codesitio.com */ public class CadenasString { public static void main(String[] args) { String nombre, apellido, domicilio, callePaseo; //inicializamos los String nombre="Pepe"; apellido="Gotera"; callePaseo="la calle"; domicilio="Villabotijos de Abajo"; System.out.println("Me llamo ".concat(nombre).concat(apellido).concat(" y vivo en ").concat(callePaseo).concat(domicilio)); System.out.println(); //Las variables o cadenas originales permanecen intactas System.out.println(nombre); System.out.println(apellido); System.out.println(callePaseo); System.out.println(domicilio); } } |
En consola comprobamos que los valores de las variables de clase String originales permanecen intactas:

¿Como comparar si dos cadenas o Strings son iguales?
Para comparar o comprobar la similitud de dos cadenas o Strings podemos usar varios métodos de la clase String. Estos métodos son los siguientes:
Método. | Descripción. |
---|---|
equals(String cadena) | Devuelve true o false tras la comparación de cadenas. |
equalsIgnoreCase(String cadena) | Igual que el anterior pero sin tener en cuenta Mayúsculas ni minúsculas. |
compareTo(String cadena) | Compara caracter a caracter alfabéticamente devuelve un entero mayor, menor ó igual a 0. |
compareToIgnoreCase(String cadena) | Igual que el anterior pero sin tener en cuenta Mayúsculas ni minúsculas. |
Veamos un ejemplo de programa en java que compara cadenas de caracteres o strings:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package comparacadenas; /** * * @author codesitio.com */ public class ComparaCadenas { public static void main(String[] args) { String cad1="castillo"; String cad2="casTillo"; //Usando equals if(cad1.equals(cad2)){ System.out.println("El método equals dice que cad1 es igual a cad2"); }else{ System.out.println("El método equals dice que cad1 y cad2 no son iguales"); } //Usando equalsIgnoreCase if(cad1.equalsIgnoreCase(cad2)){ System.out.println("El método equalsIgnoreCase dice que cad1 es igual a cad2"); }else{ System.out.println("El método equalsIgnoreCase dice que cad1 y cad2 no son iguales"); } System.out.println(); //Usando compareTo if(cad1.compareTo(cad2) == 0){ System.out.println("El método compareTo dice que cad1 es igual a cad2"); }else if(cad1.compareTo(cad2) < 0){ System.out.println("El método compareTo dice que cad1 y cad2 no son iguales. cad1 es menor alfabeticamente"); }else{ System.out.println("El método compareTo dice que cad1 y cad2 no son iguales. cad1 es mayor alfabeticamente"); } //Usando compareToIgnoreCase if(cad1.compareToIgnoreCase(cad2) == 0){ System.out.println("El método compareToIgnoreCase dice que cad1 es igual a cad2"); }else if(cad1.compareToIgnoreCase(cad2) < 0){ System.out.println("El método compareToIgnoreCase dice que cad1 y cad2 no son iguales. cad1 es menor alfabeticamente"); }else{ System.out.println("El método compareToIgnoreCase dice que cad1 y cad2 no son iguales. cad1 es mayor alfabeticamente"); } } } |
En consola obtenemos la siguiente salida:

¿Como acceder a un carácter dentro de una cadena o String?
Un string o variable de la clase String tiene semejanza con un array o matriz de caracteres, es decir, los caracteres que forman dicho string están colocados según un indice que los numera. Por ejemplo en el string «Hola amigos» el carácter «H» ocuparía la posición «0» del indice y el carácter «m» ocuparía la posición «6» del índice.
El método charAt(int index) retorna el carácter situado en la posición index que se le pase como parámetro. Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package accesocadena; /** * * @author codesitio.com */ public class AccesoCadena { public static void main(String[] args) { String cadena = "Hola Pepe"; char car1; car1 = cadena.charAt(5); System.out.println(car1); //Presentaria el caracter "P" } } |
¿Como convertir un String en un array y un array en un string?
Tal y como hemos dicho antes una cadena o String no se diferencia en mucho de un array (En algunos lenguajes de programación son misma cosa). En Java podemos obtener un array de una cadena utilizando el método toCharArray(). Posteriormente podemos recorrerlo como con cualquier otro array. En este ejemplo vemos como se utiliza:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package decadarray; /** * * @author codesitio.com */ public class DeCadArray { public static void main(String[] args) { //declaramos una cadena String cadena = "Hola Pepe"; //Declaramos un array char car1[]; //Llenamos el array con la cadena car1 = cadena.toCharArray(); //Recorremos el array a nuestro antojo for(int i=0;i<car1.length/2;i++){ System.out.println(car1[i]); } for(int i=car1.length/2;i<car1.length;i++){ System.out.print(car1[i]+" "); } System.out.println(); } } |
En consola tenemos la siguiente salida:
El caso contrario sería convertir un array en un string o cadena. Para ello la clase String dispone de varios métodos similares, el método copyValueOf(char [] array) y el método ValueOf(char [] array).
En el ejemplo siguiente de programa java demostramos su uso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package dearraycad; /** * * @author codesitio.com */ public class DeArrayCad { public static void main(String[] args) { //declaramos un array char array1[] = {'H','o','l','a',' ','P','e','p','e'}; //Declaramos tres Variable String String cadena, cadena2, cadena3; //Convertimos usando valueOf() cadena = String.valueOf(array1); //Convertimos usando copyValueOf() cadena2 = String.copyValueOf(array1); //Otra forma valdria también cadena3 = new String(array1); //presentamos las tres cadenas en consola System.out.println(cadena); System.out.println(cadena2); System.out.println(cadena3); } } |
Finalmente en consola obtenemos misma salida usando las tres formas o métodos de la clase String:

¿Como convertir un número en un String o cadena en java?
Si utilizamos el operador de concatenación «+» para unir una cadena a un número el compilador convierte todo en un String o cadena. Por otro lado, otra forma es utilizar el método toString que puede accederse dese cualquier objeto envoltorio o directamente utilizando la clase envoltorio de forma estática. A continuación os pongo un par de ejemplos de como utilizar dicho método y los resultados obtenidos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | package trabajoconcadenas; /** * * @author codesitio.com */ public class TrabajoConCadenas { public static void main(String[] args) { //Declaración de variables double d = 858.48; int i = 20; byte b =19; String cad1,cad2,cad3; //Convertimos a String cada variable usando toString cad1 = Double.toString (d); cad2 = Integer.toString (i); cad3 = Byte.toString(b); //Sumamos 1 detrás de cad1 System.out.println ("Aquí se realiza una concatenación de ("+cad1+" + 1) con resultado: ("+ (cad1 + 1)+")"); //Sumamos 1 delante de cad1 System.out.println ("Aquí se realiza una concatenación de (1 + "+cad1+") con resultado: ("+ (1 + cad1)+")"); //Sumamos 1 a la variable double "d" System.out.println ("Aquí se realiza una suma de 1 + "+d+" con resultado: "+ (1 + d)); //Concatenamos cad2 y cad3 System.out.println ("Aquí se realiza una concatenación de cad2 + cad3 con resultado: "+ (cad2 + cad3)); } } |
En consola nos daria el siguiente resultado:

¿Cómo conseguir la longitud de un String en Java?
Para averiguar o conocer el tamaño o longitud de un string en Java tenemos el método length(), que devuelve un entero o int con el número de caracteres del String o cadena.
1 2 3 4 5 6 | String cadena ="Una cadena cualquiera"; int Longi = cadena.length; System.out.print ("La cadena tiene "+longi+" caracteres"); //presentaría en pantalla: La cadena tiene 21 caracteres |
Algunos métodos más de la Clase String.
La clase String posee numerosos métodos para trabajar con cadenas. Por ejemplo a continuación os dejo algunos de los más utilizados:
| ||
Devuelve «true o false» si la cadena termina con la cadena (cad) que le pasamos como parámetro. | ||
| ||
Copia la parte de la cadena que comprende entre inicio (incluido) y final (no incluido) y lo copia en una tabla previamente creada realizando la inclusión en dicha tabla a partir de la posición «inic» de la misma. | ||
| ||
Devuelve la posición del carácter pasado como parámetro en la cadena o «-1» si no lo encuentra. | ||
| ||
Devuelve la ultima coincidencia del carácter pasado como parámetro en la cadena o «-1» si no lo encuentra. | ||
| ||
Idéntico a indexOf, pero empieza la búsqueda a partir de la posición (iniciar) pasada como parámetro. | ||
| ||
Devuelve la ultima coincidencia del carácter pasado como parámetro en la cadena o «-1» si no lo encuentra, pero empieza la búsqueda a partir de la posición (iniciar) pasada como parámetro. | ||
| ||
Devuelve la posición de la primera coincidencia con el primer carácter de la cadena pasada como parámetro o «-1» si no lo encuentra. | ||
| ||
Devuelve la posición de la última coincidencia con el primer carácter de la cadena pasada como parámetro o «-1» si no lo encuentra. | ||
| ||
Idéntico a indesOf (string cadena), pero empieza la búsqueda a partir de la posición (iniciar) pasada como parámetro. | ||
| ||
Idéntico a lastIndexOf(string cadena), pero empieza la búsqueda a partir de la posición (iniciar) pasada como parámetro. | ||
| ||
Devuelve true o false si la cadena esta vacia. | ||
| ||
Devuelve la longitud (número de caracteres) de la cadena. | ||
| ||
remplaza todos los caracteres «car1» encontrados en la cadena por el caracter «car2» introducidos como parámetros. | ||
| ||
Comprueba si la cadena empieza por el valor del parámetro introducido (es sensible a Mayúsculas y minúsculas). | ||
| ||
Idéntico al anterior pero empieza la comparación en la posición «inicio» dada como parámetro. | ||
| ||
Devuelve una subcadena formada desde la posición «inicio» hasta el final de la cadena original. | ||
| ||
Devuelve una subcadena formada desde la posición «inicio» (incluida) hasta la posición «final» (no incluida). | ||
| ||
Devuelve una cadena con todos los caracteres en minúscula. | ||
| ||
Devuelve una cadena con todos los caracteres en Mayúscula. | ||
| ||
Elimina espacios en blanco al principio y final de una cadena. |
Como seria posible que de un string podamos sacar otra palabra ejemplo : programacion «amar»