Programación 1º – UD6 – Operaciones con Cadenas de caracteres

Programación 1º – UD6 – Operaciones con Cadenas de caracteres

Java tiene varios mecanismos para trabajar con cadenas de texto. Estas se pueden clasificar en cadenas inmutables (con String) y cadenas modificables (con StringBuilder y StringBuffer).

A) Cadenas Inmutables – Clase String

Una cadena String en Java es inmutable. Esto significa que una vez creada, su contenido no puede cambiar. Cada vez que realizas una operación sobre una cadena (como concatenar, reemplazar, etc.), Java crea un nuevo objeto String en memoria, y el anterior no se modifica.

📌 Ejemplo:

String saludo = "Hola";
saludo = saludo + " mundo"; // Se crea un nuevo String con "Hola mundo"

➡ Aunque parezca que modificaste la cadena saludo, en realidad estás creando una nueva cadena y reasignándola a la variable.

1. Concatenación de cadenas

1.1 Unión de cadenas (+ y concat())

Puedes unir dos o más cadenas para formar una sola.

Ejemplo:

String nombre = "Juan";
String saludo = "Hola " + nombre; // Usando +
System.out.println(saludo); // Hola Juan

También puedes usar el método concat():

String saludo = "Hola ".concat("Mundo");
System.out.println(saludo); // Hola Mundo

1.2 Concatenación con otros tipos (números, objetos)

Si concatenas una cadena con un número u objeto, Java convierte automáticamente el valor a texto usando toString().

Ejemplo:

int edad = 25;
String mensaje = "Tienes " + edad + " años.";
System.out.println(mensaje); // Tienes 25 años.

2. Manipulación y búsqueda de texto

2.1 Acceso a caracteres y extracción de subcadenas

  • length() → Devuelve cuántos caracteres tiene la cadena.
  • charAt(int index) → Devuelve el carácter en la posición indicada (índice inicia en 0).
  • substring(inicio) → Devuelve desde esa posición hasta el final.
  • substring(inicio, fin) → Devuelve desde inicio hasta fin-1.

Ejemplo:

String palabra = "Programación";
System.out.println(palabra.length()); // 12
System.out.println(palabra.charAt(0)); // 'P'
System.out.println(palabra.substring(0, 7)); // "Program"
System.out.println(palabra.substring(7)); // "ación"

2.2 Búsqueda en cadenas

  • indexOf("texto"): posición donde comienza una subcadena (o -1 si no la encuentra).
  • contains("texto"): devuelve true si contiene el texto.
  • startsWith("texto"): true si la cadena comienza con ese texto.
  • endsWith("texto"): true si termina con ese texto.

Ejemplo:

String frase = "La programación es divertida";
System.out.println(frase.indexOf("es")); // 18
System.out.println(frase.contains("diver")); // true
System.out.println(frase.startsWith("La")); // true
System.out.println(frase.endsWith("divertida")); // true

3. Conversión entre texto y números

De número a cadena (valueOf, toString()):

int numero = 42;
String texto = String.valueOf(numero); // "42"

De cadena a número (parseInt, parseDouble…):

String cadena = "100";
int num = Integer.parseInt(cadena); // 100

⚠️ Si la cadena no contiene un número válido, se lanza una excepción NumberFormatException.

4. Formateo de texto con String.format()

El método String.format() permite crear cadenas con valores variables usando un formato específico.
Es muy similar a System.out.printf(), pero en vez de imprimir, devuelve una cadena formateada.

Símbolos de formato:

  • %s → Cadena de texto (String) (Ej: “Ana”)
  • %d → Número entero (int, long) (Ej: 25)
  • %f → Número decimal (float, double) (Ej: 3.14, 2.71828)
  • %.2f → Decimal con 2 cifras (Ej: 3.14)
  • %n → Salto de línea (como \n)

Ejemplo:

String nombre = "Ana";
int edad = 28;
String info = String.format("Nombre: %s - Edad: %d", nombre, edad);
System.out.println(info); // Nombre: Ana - Edad: 28

Otro ejemplo con decimales

double precio = 12.5;
String producto = "Café";

String factura = String.format("Producto: %s | Precio: %.2f €", producto, precio);
System.out.println(factura);
// Salida: Producto: Café | Precio: 12.50 

5. Comparación de cadenas

Métodos:

  • equals(String): compara si dos cadenas son idénticas (respeta mayúsculas/minúsculas).
  • equalsIgnoreCase(String): igual que equals, pero ignora diferencias de mayúsculas.
  • compareTo(String): compara alfabéticamente. Devuelve:
    • 0 si son iguales
    • < 0 si es menor
    • 0 si es mayor
  • compareToIgnoreCase(String): igual pero ignora mayúsculas.

Ejemplo:

String a = "Casa";
String b = "casa";

System.out.println(a.equals(b)); // false
System.out.println(a.equalsIgnoreCase(b)); // true
System.out.println(a.compareTo("Casa")); // 0
System.out.println(a.compareToIgnoreCase("cAsA")); // 0

6. Transformación de texto

  • trim(): elimina espacios al inicio y final.
  • toLowerCase() / toUpperCase(): cambia a minúsculas o mayúsculas.
  • replace("a", "b"): reemplaza caracteres o texto.

Ejemplo:

String cadena = "  Hola Mundo  ";
System.out.println(cadena.trim()); // "Hola Mundo"
System.out.println(cadena.toLowerCase()); // " hola mundo "
System.out.println(cadena.toUpperCase()); // " HOLA MUNDO "
System.out.println(cadena.replace("o", "0")); // " H0la Mund0 "

B) Cadenas Modificables – StringBuilder y StringBuffer

Cuando usas la clase String, cada vez que modificas una cadena (como al concatenar), se crea un nuevo objeto String en memoria. Si haces muchas modificaciones (por ejemplo, en un bucle), esto puede ser ineficiente y consumir mucha memoria.

Para resolver este problema, Java proporciona dos clases que permiten modificar cadenas de forma eficiente, sin crear nuevos objetos: StringBuilder y StringBuffer. Tanto StringBuilder como StringBuffer son excelentes opciones cuando necesitas modificar cadenas frecuentemente. Úsalos cuando notes que tu código hace muchas concatenaciones dentro de bucles o métodos repetitivos.

StringBuilder

No es sincronizado → más rápido, pero no seguro en entornos multihilo.

Métodos útiles de StringBuilder:

  • append(String): Añade texto al final de la cadena
  • insert(int pos, txt): Inserta texto en una posición específica
  • replace(inicio, fin, txt): Reemplaza una parte del texto
  • delete(inicio, fin): Elimina una parte del texto
  • reverse(): Invierte el texto
  • toString(): Convierte el StringBuilder en un String

Ejemplo:

StringBuilder sb = new StringBuilder("Hola");

sb.append(" mundo"); // Agrega " mundo" al final (sb = "Hola mundo")
sb.insert(5, "Java "); // Inserta "Java " en la posición 5 (sb = "Hola Java mundo")
sb.replace(5, 9, "Programar "); // Reemplaza "Java" por "Programar " (sb = "Hola Programar mundo")
sb.delete(0, 5); // Elimina "Hola " (sb = "Programar mundo")
sb.reverse(); // Invierte todo (sb = "odnum raromargorP")

StringBuffer

Es igual que StringBuilder, pero es seguro para uso con múltiples hilos (sincronizado).

StringBuffer sbf = new StringBuffer("Hola");
sbf.append(" a todos"); 
System.out.println(sbf); // Hola a todos

PROGRAMACIÓN

Preguntas de Programación de DAM

Actividades de Programación UD6 - 2.1. Operaciones con cadenas de caracteres

Preguntas de Programación de 1ºDAM de la Unidad 6: Operaciones avanzadas con cadenas de caracteres

1 / 56

¿Qué devolverá este código usando StringBuffer?

StringBuffer sbf = new StringBuffer("Hello");
System.out.println(sbf.length());

2 / 56

¿Qué se imprimirá con este código?

String cad = "Java";
System.out.println(cad.startsWith("Ja"));

3 / 56

¿Qué se imprimirá al ejecutar el siguiente código?

String cad = "Java Programming";
System.out.println(cad.equals("java programming"));

4 / 56

¿Qué será el resultado de este código?

String cad = "Java";
System.out.println(cad.replace("a", "o"));

5 / 56

¿Cuál es el resultado de este código?

String cad = "  Java  ";
System.out.println(cad.contains("Java"));

6 / 56

¿Qué saldrá por consola?

String cad = "java";
System.out.println(cad.toUpperCase());

7 / 56

¿Qué devolverá el siguiente código?

String cad = "Hello World";
System.out.println(cad.substring(6, 11));

8 / 56

¿Qué devolverá este código?

String cad = "Programming";
System.out.println(cad.length());

9 / 56

¿Qué imprimirá este código?

String cad = "Hello";
String cad2 = "Hello";
System.out.println(cad == cad2);

10 / 56

¿Qué imprime este código?

String cad = "Learning Java";
System.out.println(cad.substring(3, 10));

11 / 56

¿Qué devuelve este código con StringBuilder?

StringBuilder sb = new StringBuilder("Java");
sb.append(" is fun");
sb.delete(0, 4);
System.out.println(sb);

12 / 56

¿Qué hará este código con StringBuilder?

StringBuilder sb = new StringBuilder("Java");
sb.reverse();
System.out.println(sb);

13 / 56

¿Qué imprimirá este código?

String cad = "Java Programming";
System.out.println(cad.indexOf("P"));

14 / 56

¿Qué imprimirá el siguiente código con StringBuffer?

StringBuffer sbf = new StringBuffer("Java");
sbf.append("Script").insert(4, "Language ");
System.out.println(sbf);

15 / 56

¿Qué imprimirá el siguiente código con StringBuilder?

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World").delete(0, 5).reverse();
System.out.println(sb);

16 / 56

¿Qué se imprimirá con este código?

String cad = "java";
System.out.println(cad.equalsIgnoreCase("Java"));

17 / 56

¿Qué imprimirá este código con StringBuilder?

StringBuilder sb = new StringBuilder("apple");
sb.replace(0, 1, "A");
System.out.println(sb);

18 / 56

¿Qué se imprimirá en este código?

String cad = "Hello";
cad = cad.concat(" World!");
System.out.println(cad);

19 / 56

¿Qué se imprimirá con este código?

String cad = "Java Programming";
System.out.println(cad.replace("Programming", "is fun"));

20 / 56

¿Qué devolverá este código usando StringBuilder?

StringBuilder sb = new StringBuilder("Programming");
System.out.println(sb.charAt(4));

21 / 56

¿Qué devolverá el siguiente código?

String cad = "Java Programming";
System.out.println(cad.lastIndexOf("a"));

22 / 56

¿Qué devolverá el siguiente código?

String cad = "Hello, World!";
System.out.println(cad.indexOf("World"));

23 / 56

¿Qué hará el siguiente código usando StringBuffer?

StringBuffer sbf = new StringBuffer("Programming");
sbf.insert(11, " Language");
System.out.println(sbf);

24 / 56

¿Qué hará el siguiente código?

String cad = "programming";
String result = String.format("Length: %d", cad.length());
System.out.println(result);

25 / 56

¿Qué imprimirá este código?

String cad = "Java";
System.out.println(cad.length());

26 / 56

¿Qué imprimirá este código?

String cad = "Hello World";
System.out.println(cad.startsWith("World"));

27 / 56

¿Qué imprimirá el siguiente código?

String cad = "   Hello World   ";
System.out.println(cad.trim());

28 / 56

¿Qué imprime el siguiente código?

String cad = "Java";
String cad2 = cad.toLowerCase();
System.out.println(cad2);

29 / 56

¿Qué mostrará el siguiente código?

String cad = "Java";
System.out.println(cad.indexOf("v"));

30 / 56

¿Qué imprimirá este código?

String cad = "Java";
cad += 2 + 3;
System.out.println(cad);

31 / 56

¿Qué devolverá este código?

String cad = "Java Programming";
System.out.println(cad.substring(5));

32 / 56

¿Qué imprimirá el siguiente código?

String cad = "Java";
String cad2 = " Java";
System.out.println(cad == cad2);

33 / 56

¿Qué imprimirá este código con StringBuffer?

StringBuffer sbf = new StringBuffer("Hello World");
sbf.delete(5, 11);
System.out.println(sbf);

34 / 56

¿Qué imprimirá el siguiente código utilizando StringBuilder?

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World!");
System.out.println(sb);

35 / 56

¿Qué imprimirá este código?

String cad = "Java Programming";
System.out.println(cad.substring(0, 4));

36 / 56

¿Qué imprimirá el siguiente código?

String cad = "Java is fun";
System.out.println(cad.replaceAll("is", "was"));

37 / 56

¿Qué imprimirá el siguiente código con StringBuilder?

StringBuilder sb = new StringBuilder("Java");
sb.append(" ").append("Programming");
System.out.println(sb);

38 / 56

¿Qué devolverá el siguiente código usando StringBuilder?

StringBuilder sb = new StringBuilder("Java Programming");
sb.delete(0, 4);
System.out.println(sb);

39 / 56

¿Qué mostrará este código?

String cad = "Java";
cad = cad.concat(" is fun");
System.out.println(cad);

40 / 56

¿Qué se imprimirá al ejecutar este código?

String cad = "Java";
System.out.println(cad.substring(1, 3));

41 / 56

¿Qué imprimirá este código?

String cad = "Java";
System.out.println(cad.replace("v", "z"));

42 / 56

¿Qué hará el siguiente código utilizando StringBuilder?

StringBuilder sb = new StringBuilder("Java");
sb.insert(4, " Programming");
System.out.println(sb);

43 / 56

¿Qué devolverá este código?

String cad = "Java";
System.out.println(cad.compareTo("Java"));

44 / 56

¿Qué hará el siguiente código con StringBuilder?

StringBuilder sb = new StringBuilder("Hello");
sb.replace(0, 2, "Hi");
System.out.println(sb);

45 / 56

¿Qué será el resultado de este código?

String cad = "java programming";
String cad2 = cad.toUpperCase();
System.out.println(cad2);

46 / 56

¿Qué devuelve el siguiente código?

String cad = "Learning Java";
System.out.println(cad.contains("Java"));

47 / 56

¿Qué imprimirá el siguiente código con StringBuffer?

StringBuffer sbf = new StringBuffer("Good");
sbf.append(" Morning");
System.out.println(sbf);

48 / 56

¿Qué imprimirá el siguiente código usando StringBuffer?

StringBuffer sbf = new StringBuffer("Programming");
sbf.replace(0, 4, "Code");
System.out.println(sbf);

49 / 56

¿Qué imprimirá el siguiente código?

String cad = "Java";
cad += " 101";
System.out.println(cad);

50 / 56

¿Qué imprimirá el siguiente código con StringBuffer?

StringBuffer sbf = new StringBuffer("12345");
sbf.reverse();
System.out.println(sbf);

51 / 56

¿Qué resultado se obtiene con el siguiente código?

String cad = "Cadena de prueba";
System.out.println(cad.charAt(7));

52 / 56

¿Qué se imprimirá con este código usando StringBuilder?

StringBuilder sb = new StringBuilder("abc");
sb.insert(1, "z");
System.out.println(sb);

53 / 56

¿Qué hará el siguiente código?

String cad = "Programming";
System.out.println(cad.indexOf("m", 5));

54 / 56

¿Qué imprimirá este código?

String cad = "Java";
System.out.println(cad.charAt(3));

55 / 56

¿Qué imprimirá este código?

String cad = "Java programming";
System.out.println(cad.substring(5));

56 / 56

¿Qué resultado se obtiene con este código?

String cad = "Hello";
String cad2 = cad.concat(" World");
System.out.println(cad2);

Your score is

0%

Actividades de programación

Actividad 1: Contar las Vocales en una Cadena

Crear un programa que reciba una cadena de texto y cuente cuántas vocales (a, e, i, o, u) contiene.

  • Solicitar al usuario que ingrese una cadena de texto.
  • Iterar sobre cada carácter de la cadena.
  • Contar cuántas vocales aparecen en la cadena.
  • Imprimir el resultado.

Ejemplo:

String cad = "Programación";
// Debería imprimir: "El número de vocales es: 5"

import java.util.Scanner;

public class ContarVocales {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(“Introduce una cadena: “);
        String cad = sc.nextLine();
       
        int contadorVocales = 0;
        cad = cad.toLowerCase(); // Convertir a minúsculas para que no distinga entre mayúsculas y minúsculas
        for (int i = 0; i < cad.length(); i++) {
            char c = cad.charAt(i);
            if (c == ‘a’ || c == ‘e’ || c == ‘i’ || c == ‘o’ || c == ‘u’) {
                contadorVocales++;
            }
        }
       
        System.out.println(“El número de vocales es: ” + contadorVocales);
    }
}

Actividad 2: Revertir una Cadena

Escribe un programa que invierta una cadena ingresada por el usuario.

  • Solicitar al usuario que ingrese una cadena de texto.
  • Usar el método reverse() de StringBuilder o StringBuffer para invertir la cadena.
  • Mostrar la cadena invertida.

Ejemplo:

String cad = "Hola Mundo";
// Debería imprimir: "odnuM aloH"

import java.util.Scanner;

public class RevertirCadena {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(“Introduce una cadena: “);
        String cad = sc.nextLine();
       
        StringBuilder sb = new StringBuilder(cad);
        sb.reverse();  // Invertir la cadena
       
        System.out.println(“Cadena invertida: ” + sb);
    }
}

Actividad 3: Comprobación de Palíndromo

Verificar si una cadena es un palíndromo (una palabra que se lee igual de izquierda a derecha que de derecha a izquierda).

  • Solicitar al usuario que ingrese una cadena.
  • Eliminar espacios y convertir todos los caracteres a minúsculas para hacer la comparación más sencilla.
  • Comprobar si la cadena es igual a su versión invertida.
  • Imprimir si la cadena es un palíndromo o no.

Ejemplo:

String cad = "Anita lava la tina";
// Debería imprimir: "Es un palíndromo."

import java.util.Scanner;

public class ComprobarPalindromo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(“Introduce una cadena: “);
        String cad = sc.nextLine();
       
        cad = cad.replaceAll(“\\s+”, “”).toLowerCase();  // Eliminar espacios y convertir a minúsculas
       
        boolean esPalindromo = true;
        for (int i = 0; i < cad.length() / 2; i++) {
            if (cad.charAt(i) != cad.charAt(cad.length() – i – 1)) {
                esPalindromo = false;
                break;
            }
        }
       
        if (esPalindromo) {
            System.out.println(“Es un palíndromo.”);
        } else {
            System.out.println(“No es un palíndromo.”);
        }
    }
}

Actividad 4: Contar las Palabras de una Cadena

Crear un programa que cuente el número de palabras en una cadena de texto.

  • Solicitar al usuario que ingrese una cadena de texto.
  • Contar cuántas palabras hay en la cadena.
  • Imprimir el número de palabras.

Ejemplo:

String cad = "Hoy es un gran día";
// Debería imprimir: "El número de palabras es: 5"

import java.util.Scanner;

public class ContarPalabras {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(“Introduce una cadena: “);
        String cad = sc.nextLine();
       
        int contadorPalabras = 0;
        boolean enPalabra = false;
       
        for (int i = 0; i < cad.length(); i++) {
            char c = cad.charAt(i);
            if (Character.isWhitespace(c)) {
                enPalabra = false;  // Si encontramos un espacio, terminamos la palabra
            } else if (!enPalabra) {
                enPalabra = true;  // Si no estábamos en una palabra, comenzamos una nueva
                contadorPalabras++;
            }
        }
       
        System.out.println(“El número de palabras es: ” + contadorPalabras);
    }
}

Actividad 5: Eliminar Espacios Extra en una Cadena

Eliminar los espacios extra de una cadena (más de uno consecutivo), dejando solo uno entre las palabras.

  • Solicitar al usuario que ingrese una cadena con espacios extra.
  • Usar el método trim() para eliminar los espacios al principio y final.
  • Imprimir la cadena corregida.

Ejemplo:

String cad = " Hola Mundo Java ";
// Debería imprimir: "Hola Mundo Java"

import java.util.Scanner;

public class EliminarEspaciosExtra {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print(“Introduce una cadena con espacios extra: “);
        String cad = sc.nextLine();
       
        // Eliminar espacios iniciales y finales
        cad = cad.trim();
       
        // Reemplazar múltiples espacios por uno solo
        StringBuilder sb = new StringBuilder();
        boolean enEspacio = false;
       
        for (int i = 0; i < cad.length(); i++) {
            char c = cad.charAt(i);
            if (Character.isWhitespace(c)) {
                if (!enEspacio) {
                    sb.append(‘ ‘);  // Añadir solo un espacio
                    enEspacio = true; // Marcar que estamos en un espacio
                }
            } else {
                sb.append(c);
                enEspacio = false;  // Salir del espacio
            }
        }
       
        System.out.println(“Cadena corregida: ” + sb);
    }
}