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 usarString
cuando se realizan muchas concatenaciones. UsaStringBuilder
para mejorar el rendimiento. - Índices fuera de rango:
Llamar a métodos comocharAt
osubstring
con índices inválidos genera una excepciónStringIndexOutOfBoundsException
.
Resumen
String
es inmutable y adecuado para operaciones simples.- Usa
StringBuilder
para manipular texto de forma eficiente. - Métodos como
equals
yreplace
son esenciales para trabajar con cadenas. - Entender las diferencias entre
String
yStringBuilder
te ayudará a escribir código más óptimo.