En Java, las cadenas de texto se manejan con la clase String. Aunque parecen tipos primitivos, los String son objetos inmutables, lo que significa que no pueden modificarse una vez creados. Este artículo explorará cómo trabajar con String y herramientas como StringBuilder para manipular texto de forma eficiente.
1. Creación y características de String
Un objeto String puede crearse de varias maneras:
Ejemplo:
public class CrearString {
public static void main(String[] args) {
String literal = "Hola"; // Literal
String objeto = new String("Hola"); // Usando constructor
System.out.println(literal);
System.out.println(objeto);
}
}
Inmutabilidad de String:
Si realizas cambios en una cadena, se crea un nuevo objeto en memoria.
Ejemplo:
String texto = "Hola"; texto = texto + " mundo"; System.out.println(texto); // Crea un nuevo objeto con "Hola mundo"
2. Métodos comunes de la clase String
La clase String ofrece muchos métodos útiles para manipular texto:
| Método | Descripción | Ejemplo |
|---|---|---|
length() | Devuelve la longitud de la cadena. | "Hola".length() → 4 |
charAt(int index) | Obtiene el carácter en la posición indicada. | "Hola".charAt(1) → 'o' |
substring(int begin) | Devuelve un subtexto desde una posición. | "Hola".substring(2) → "la" |
substring(int begin, int end) | Devuelve un subtexto entre dos posiciones. | "Hola".substring(1, 3) → "ol" |
toUpperCase() | Convierte la cadena a mayúsculas. | "Hola".toUpperCase() → "HOLA" |
toLowerCase() | Convierte la cadena a minúsculas. | "Hola".toLowerCase() → "hola" |
indexOf(String s) | Devuelve la posición de una subcadena. | "Hola".indexOf("o") → 1 |
replace(String a, String b) | Reemplaza una subcadena por otra. | "Hola".replace("o", "e") → "Hela" |
equals(String s) | Compara cadenas (sensible a mayúsculas). | "Hola".equals("hola") → false |
equalsIgnoreCase(String s) | Compara cadenas (ignora mayúsculas). | "Hola".equalsIgnoreCase("hola") → true |
Ejemplo práctico con varios métodos:
public class MetodosString {
public static void main(String[] args) {
String texto = "Programar en Java";
System.out.println("Longitud: " + texto.length());
System.out.println("Caracter en posición 3: " + texto.charAt(3));
System.out.println("Subcadena: " + texto.substring(10));
System.out.println("Mayúsculas: " + texto.toUpperCase());
System.out.println("Reemplazo: " + texto.replace("Java", "Python"));
}
}
Salida:
Longitud: 17 Caracter en posición 3: g Subcadena: en Java Mayúsculas: PROGRAMAR EN JAVA Reemplazo: Programar en Python
3. Comparación de cadenas
En Java, las cadenas no deben compararse con == porque este operador compara referencias de memoria, no contenido.
Forma correcta de comparar cadenas:
equals: Para igualdad exacta.equalsIgnoreCase: Para igualdad ignorando mayúsculas y minúsculas.
Ejemplo:
public class CompararCadenas {
public static void main(String[] args) {
String texto1 = "Hola";
String texto2 = new String("Hola");
System.out.println(texto1 == texto2); // false (distintas referencias)
System.out.println(texto1.equals(texto2)); // true (mismo contenido)
}
}
4. Uso de StringBuilder
Cuando necesitas modificar cadenas repetidamente, StringBuilder es más eficiente que String, ya que es mutable.
Métodos comunes de StringBuilder:
| Método | Descripción | Ejemplo |
|---|---|---|
append(String s) | Añade texto al final. | "Hola".append(" Mundo") → "Hola Mundo" |
insert(int index, String s) | Inserta texto en una posición específica. | "Hola".insert(2, "a") → "Hoala" |
delete(int start, int end) | Elimina texto entre dos posiciones. | "Hola".delete(1, 3) → "Ha" |
reverse() | Invierte el contenido. | "Hola".reverse() → "aloH" |
Ejemplo práctico:
public class UsoStringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hola");
sb.append(" Mundo");
sb.insert(5, " Java");
sb.delete(0, 5);
System.out.println(sb); // Java Mundo
}
}
5. Errores comunes al trabajar con cadenas
- Confusión entre
==yequals:
Usar==para comparar contenido de cadenas producirá resultados inesperados. - Mala gestión de inmutabilidad:
Evita usarStringcuando se realizan muchas concatenaciones. UsaStringBuilderpara mejorar el rendimiento. - Índices fuera de rango:
Llamar a métodos comocharAtosubstringcon índices inválidos genera una excepciónStringIndexOutOfBoundsException.
Resumen
Stringes inmutable y adecuado para operaciones simples.- Usa
StringBuilderpara manipular texto de forma eficiente. - Métodos como
equalsyreplaceson esenciales para trabajar con cadenas. - Entender las diferencias entre
StringyStringBuilderte ayudará a escribir código más óptimo.