1. Método length(): ¿cuántos caracteres hay en la cadena?
El método length() devuelve el número de caracteres de una cadena. No es exactamente lo mismo que «cantidad de bytes» (especialmente si la cadena contiene emojis o caracteres Unicode), pero para la mayoría de tareas — es justo lo que necesitas.
Ejemplo de uso
String name = "Vasilisa";
int length = name.length();
System.out.println("Número de letras del nombre: " + length); // 8
Para qué sirve
- Comprobar si el usuario ha introducido una cadena vacía.
- Comprobar la longitud mínima/máxima de una contraseña.
- Saber cuántos caracteres quedan hasta el límite (por ejemplo, en un SMS o un tuit).
Ejemplo: comprobación de cadena vacía
String input = "";
if (input.length() == 0)
{
System.out.println("¡La cadena está vacía!");
}
Truco: para comprobar si una cadena está vacía también existe el método isEmpty(), pero hablaremos de él más adelante.
FAQ breve
- El método length() no acepta argumentos (los paréntesis van siempre vacíos).
- Si la cadena contiene espacios, ¡también se cuentan como caracteres!
- Si la cadena es null, llamar a length() provocará NullPointerException — comprueba primero si es null.
2. Método substring(): extraemos parte de una cadena
El método substring() permite obtener una subcadena — «cortar» un fragmento por los índices indicados.
Existen dos formas principales de llamada:
- str.substring(startIndex) — desde la posición startIndex hasta el final de la cadena.
- str.substring(startIndex, endIndex) — desde la posición startIndex hasta endIndex (sin incluir el carácter con índice endIndex).
Atención: la indexación de caracteres en una cadena empieza en 0.
Ejemplos de uso
Ejemplo 1: Obtener las tres primeras letras del nombre
String name = "Vasilisa";
String firstThree = name.substring(0, 3); // "Vas"
System.out.println(firstThree);
Ejemplo 2: Obtener la extensión de un archivo
String fileName = "document.pdf";
int dotIndex = fileName.indexOf(".");
String extension = fileName.substring(dotIndex + 1); // "pdf"
System.out.println(extension);
Ejemplo 3: Los últimos 4 caracteres de la cadena
String cardNumber = "1234567890123456";
String lastFour = cardNumber.substring(cardNumber.length() - 4); // "3456"
System.out.println("Últimos 4 dígitos: " + lastFour);
Detalles y consideraciones
- Índices incorrectos (startIndex < 0, endIndex > longitud, startIndex > endIndex) provocan StringIndexOutOfBoundsException.
- El método siempre devuelve una cadena nueva — la original no cambia.
- La segunda forma (con dos parámetros) no incluye el carácter con índice endIndex.
String str = "abcdef";
// Índices: 0 1 2 3 4 5
str.substring(1, 4) → "bcd" // caracteres con índices 1, 2 y 3
substring(start, end)
3. Método indexOf(): buscamos un carácter o una subcadena
El método indexOf() busca la posición (índice) de la primera aparición de un carácter o subcadena dados.
- Si lo encuentra — devuelve el índice (desde 0).
- Si no lo encuentra — devuelve -1.
Ejemplos de uso
Ejemplo 1: Encontrar el primer punto en un email
String email = "ivan.petrov@mail.com";
int dotIndex = email.indexOf('.');
System.out.println("El primer punto está en la posición: " + dotIndex); // 4
Ejemplo 2: Encontrar una subcadena
String text = "¡Me encanta Java!";
int index = text.indexOf("Java");
System.out.println(index); // 12
Ejemplo 3: Encontrar un carácter después de una posición dada
String s = "abracadabra";
int firstA = s.indexOf('a'); // 0
int secondA = s.indexOf('a', firstA + 1); // 3
System.out.println("La segunda 'a' está en la posición: " + secondA);
Detalles y consideraciones
- Si el carácter/la subcadena aparecen varias veces, se devuelve el índice de la primera aparición.
- Para buscar la última aparición, usa lastIndexOf().
- Para un carácter usa comillas simples: 'a'; para una subcadena — dobles: "abc".
Ejemplo: búsqueda de la extensión de un archivo
String fileName = "report.final.version.docx";
int lastDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastDot + 1);
System.out.println("Extensión del archivo: " + extension); // "docx"
4. Método charAt(): obtenemos un carácter por índice
El método charAt(index) devuelve el carácter de la cadena por su índice.
Ejemplos de uso
Ejemplo 1: Comprobar la primera letra de una cadena
String city = "Minsk";
char first = city.charAt(0); // 'M'
System.out.println("Primera letra: " + first);
Ejemplo 2: Comprobar si la cadena empieza con mayúscula
String word = "Java";
if (Character.isUpperCase(word.charAt(0)))
{
System.out.println("¡La palabra empieza con mayúscula!");
}
Ejemplo 3: Recorrer todos los caracteres de una cadena
String text = "Hola";
for (int i = 0; i < text.length(); i++)
{
System.out.println("Carácter #" + i + ": " + text.charAt(i));
}
Detalles y consideraciones
- Un índice fuera de rango (por ejemplo, -1 o >= longitud) provocará StringIndexOutOfBoundsException.
- El método devuelve un valor de tipo char, no una cadena.
5. Método toCharArray(): convertimos una cadena en un array de caracteres
El método toCharArray() es una forma sencilla de convertir una cadena en un array de caracteres (char[]). Útil para procesamiento carácter a carácter, ordenación, comprobaciones, etc.
Ejemplo de uso:
String text = "Hello";
char[] characters = text.toCharArray();
for (char c : characters)
{
System.out.println(c);
}
// Salida:
// H
// e
// l
// l
// o
Para qué sirve:
- Procesamiento de caracteres: los arrays son más cómodos para lógica carácter a carácter (por ejemplo, comprobar anagramas).
- Compatibilidad: algunas API esperan char[] como argumento.
6. Método replace(): reemplazamos subcadenas
El método replace(CharSequence target, CharSequence replacement) reemplaza todas las apariciones de la subcadena target por replacement. Devuelve una cadena nueva; la original no cambia.
Ejemplo de uso:
String sentence = "Me encanta programar en Java.";
String newSentence = sentence.replace("Java", "Java 25");
System.out.println(newSentence);
// Salida: Me encanta programar en Java 25.
String email = "support@company.com";
String cleanEmail = email.replace("@", "[at]");
System.out.println(cleanEmail);
// Salida: support[at]company.com
Detalles y consideraciones
- Se reemplazan todas las apariciones.
- String es inmutable: replace() devuelve una cadena nueva.
- Para reglas más complejas, usa replaceAll() con una expresión regular.
7. Métodos trim() y strip(): eliminamos espacios
Ambos métodos eliminan caracteres «invisibles» al inicio y al final de la cadena.
- trim() — método clásico: elimina espacios, tabulaciones, saltos de línea y parte de los caracteres de control, pero no todos los espacios Unicode.
- strip() — método moderno: tiene en cuenta todos los tipos de espacios según el estándar Unicode. Preferible en proyectos nuevos.
Ejemplo de uso:
String s1 = " Hola, mundo! ";
System.out.println(s1.trim());
// Salida: "Hola, mundo!"
String s2 = " \u2005 Java 11 \u2005 "; // \u2005 — es un espacio Unicode
System.out.println("trim(): " + s2.trim());
System.out.println("strip(): " + s2.strip());
// Salida:
// trim(): Java 11
// strip(): Java 11
Para qué sirve:
- Limpieza de la entrada de usuario de espacios sobrantes.
- Normalización de datos de archivos/registros antes del procesamiento.
8. Práctica: resolvemos ejercicios
Ejercicio 1: Comprobar la longitud de una contraseña
String password = "qwerty";
if (password.length() < 8)
{
System.out.println("¡La contraseña es demasiado corta!");
}
else
{
System.out.println("La contraseña es válida.");
}
Ejercicio 2: Extraer el nombre de un nombre completo
String fullName = "Ivanov Ivan Ivanovich";
int firstSpace = fullName.indexOf(' ');
String name = fullName.substring(firstSpace + 1, fullName.indexOf(' ', firstSpace + 1));
System.out.println("Nombre: " + name); // "Ivan"
Ejercicio 3: Comprobar que la cadena empieza por una letra determinada
String surname = "Petrov";
if (surname.charAt(0) == 'P')
{
System.out.println("El apellido empieza por la letra P");
}
Ejercicio 4: Obtener el dominio de un email
String email = "vasya.pupkin@gmail.com";
int at = email.indexOf('@');
String domain = email.substring(at + 1);
System.out.println("Dominio: " + domain); // "gmail.com"
Ejercicio 5: Encontrar todas las apariciones de la letra 'a' en la cadena
String s = "abracadabra";
int pos = s.indexOf('a');
while (pos != -1)
{
System.out.println("La letra 'a' se encuentra en la posición: " + pos);
pos = s.indexOf('a', pos + 1); // buscamos desde la última posición encontrada
}
9. Errores típicos al trabajar con métodos de String
Error n.º 1: acceso fuera de los límites de la cadena
Muy a menudo se confunden los índices y se accede a un carácter/subcadena que no existe.
String s = "Java";
char c = s.charAt(4); // ¡Error! Índices 0..3
String s = "Hello";
String sub = s.substring(3, 10); // ¡Error! La longitud de la cadena es 5
Error n.º 2: confusión con inclusión/exclusión del índice
El método substring(start, end) incluye el carácter con índice start, pero NO incluye el carácter con índice end.
Error n.º 3: esperar que indexOf devuelva algo distinto de -1 cuando no hay subcadena
Comprueba el resultado antes de usarlo, especialmente si luego lo usas en substring.
Error n.º 4: tratamiento incorrecto de cadenas vacías
Si la cadena está vacía (""), llamar a charAt(0) o substring(0, 1) provocará un error. Comprueba la longitud primero.
Error n.º 5: trabajar con cadenas null
Si la cadena es null, llamar a cualquier método (length(), substring(), etc.) causará NullPointerException. Comprueba siempre si es null antes de procesarla.
GO TO FULL VERSION