Una taza de café construida con las letras de JAVA

La clase String y las expresiones de caracteres en Java

Guía de programación en Java > La clase String

Introducción

En el mundo de la programación, las cadenas de caracteres (“strings”) son fundamentales para manejar textos. Java ofrece la clase String, que es una de las más utilizadas y versátiles del lenguaje. Esta clase forma parte del paquete java.lang. Representa cadenas de texto y tiene una serie de características especiales que la hacen fundamental en la programación.

En esta sesión aprenderás:

  • Las características de la clase String.
  • Sus métodos más comunes.
  • Cuándo es conveniente usar String y cuándo no.
  • Ejemplos prácticos.

Características Especiales de la Clase String

Inmutabilidad

La clase String es inmutable, lo que significa que una vez creada, su contenido no puede ser modificado. Cada vez que «modificas» una cadena, en realidad estás creando un nuevo objeto en memoria.

Ejemplo:

String saludo = "Hola";
saludo = saludo + " Mundo";
System.out.println(saludo);
  • Se crea un nuevo objeto con el valor «Hola Mundo» y el anterior «Hola» queda sin uso.
  • El objeto original «Hola» sigue existiendo en memoria (si no se recoge como basura).
  • Esto puede afectar el rendimiento si manipulas muchas cadenas repetidamente.

Almacenamiento en el Pool de Strings

Cuando creas un objeto String usando literales (ej. String texto = "Hola";), Java lo almacena en un área especial llamada Pool de Strings para optimizar el uso de memoria. Si otro literal con el mismo valor es declarado, ambos apuntarán al mismo objeto.

String s1 = "Hola"; 
String s2 = "Hola"; 
System.out.println(s1 == s2);   // true  -> Ambos apuntan al mismo objeto en el pool.

Creación de Strings

Literal de Cadena

La forma más simple de crear un String.

String saludo = "Hola";

Constructor de la Clase String

Permite crear un nuevo objeto String.

String saludo = new String("Hola"); // Evita esta forma si no es necesario

Nota: Usar el constructor crea un nuevo objeto incluso si ya existe en el Pool de Strings. Es recomendable usar literales para aprovechar el String Pool.


Métodos Más Utilizados de la Clase String

1. length()

Devuelve la longitud de la cadena.

String texto = "Hola Mundo";
System.out.println(texto.length()); // Salida: 10

2. charAt(int index)

Devuelve el carácter en la posición especificada.

System.out.println(texto.charAt(0)); // Salida: H

3. substring(int beginIndex, int endIndex)

Extrae una parte de la cadena.

System.out.println(texto.substring(0, 4));  // Salida: Hola

4. equals(Object obj)

Compara si dos cadenas son iguales (sensibles a mayúsculas y minúsculas).

System.out.println("Hola".equals("hola")); // Salida: false

5. equalsIgnoreCase(String anotherString)

Compara ignorando mayúsculas y minúsculas.

System.out.println("Hola".equalsIgnoreCase("hola")); // Salida: true

6. toUpperCase() y toLowerCase()

Convierte la cadena a mayúsculas o minúsculas.

System.out.println(texto.toUpperCase()); // Salida: HOLA MUNDO
System.out.println(texto.toLowerCase()); // Salida: hola mundo

7. trim()

Elimina los espacios en blanco al inicio y al final de la cadena.

String textoConEspacios = "   Hola   ";
System.out.println(textoConEspacios.trim()); // Salida: Hola

8. replace(char oldChar, char newChar)

Reemplaza todas las apariciones de un carácter por otro.

System.out.println(texto.replace('o', 'a')); // Salida: Hala Munda

9. contains(CharSequence s)

Verifica si una cadena contiene otra cadena.

System.out.println(texto.contains("Mundo")); // Salida: true

10. split(String regex)

Divide la cadena en partes según un patrón.

String[] palabras = texto.split(" ");
for (String palabra : palabras) {
    System.out.println(palabra);
}
// Salida:
// Hola
// Mundo

Cuándo Usar la Clase String

  1. Texto constante o inmutable:
    • Cuando necesitas trabajar con cadenas que no cambian durante la ejecución del programa.
  2. Operaciones ligeras de texto:
    • Si solo necesitas concatenar o acceder a partes de una cadena.
  3. Datos que requieren alta legibilidad:
    • Ejemplo: Mensajes, etiquetas, o nombres.

Cuándo NO Usar la Clase String

  • Manipulaciones frecuentes: Si necesitas modificar cadenas muchas veces, considera usar StringBuilder o StringBuffer.

Ejemplo Práctico: Análisis de un Texto

Escribe un programa que analice un texto dado y cuente cuántas veces aparece una palabra específica.

Código:

import java.util.Scanner;

public class AnalisisTexto {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Introduce un texto:");
        String texto = scanner.nextLine();

        System.out.println("Introduce la palabra a buscar:");
        String palabra = scanner.nextLine();

        String[] palabras = texto.split(" ");
        int contador = 0;

        for (String p : palabras) {
            if (p.equalsIgnoreCase(palabra)) {
                contador++;
            }
        }

        System.out.println("La palabra '" + palabra + "' aparece " + contador + " veces.");
    }
}

Salida Esperada:

Introduce un texto:
Hola mundo hola Mundo
Introduce la palabra a buscar:
hola
La palabra 'hola' aparece 2 veces.

Ejercicios Propuestos

  1. Longitud y acceso a caracteres:
    • Crea un programa que pida al usuario introducir una palabra y muestre:
      • La longitud de la palabra.
      • El primer y último caracter.
  2. Comparar cadenas:
    • Diseña un programa que pida al usuario dos frases y diga si son iguales o cuál es mayor lexicográficamente.
  3. Manipulación de texto:
    • Solicita al usuario un texto y:
      • Reemplaza todas las vocales con *.
      • Convierte todo a mayúsculas.
      • Muestra solo las primeras 5 letras.
  4. Dividir cadenas:
    • Pide al usuario una lista de palabras separadas por comas y muéstralas una por una.
  5. Buscar subcadenas:
    • Diseña un programa que reciba una frase y una palabra, y diga si la palabra está contenida en la frase.

Resumen

  • La clase String es fundamental para trabajar con texto en Java.
  • Es inmutable y almacena literales en el Pool de Strings.
  • Proporciona una amplia gama de métodos para manipular y analizar cadenas.
  • Para operaciones intensivas con texto, considera otras opciones como StringBuilder.

Con este conocimiento, estás listo para manipular texto de manera eficiente en tus programas. ¡Practica y experimenta con los ejemplos! 🚀


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.