Strings y Manipulación de Texto en Java

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étodoDescripciónEjemplo
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étodoDescripciónEjemplo
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

  1. Confusión entre == y equals:
    Usar == para comparar contenido de cadenas producirá resultados inesperados.
  2. Mala gestión de inmutabilidad:
    Evita usar String cuando se realizan muchas concatenaciones. Usa StringBuilder para mejorar el rendimiento.
  3. Índices fuera de rango:
    Llamar a métodos como charAt o substring con índices inválidos genera una excepción StringIndexOutOfBoundsException.

Resumen

  • String es inmutable y adecuado para operaciones simples.
  • Usa StringBuilder para manipular texto de forma eficiente.
  • Métodos como equals y replace son esenciales para trabajar con cadenas.
  • Entender las diferencias entre String y StringBuilder te ayudará a escribir código más óptimo.