Métodos de String en Java
Referencia de los métodos más comunes de String en Java: length, charAt, substring, indexOf, replace, split, toUpperCase, trim y más.
La clase String incluye decenas de métodos. Este capítulo es una referencia práctica de los que realmente usarás, agrupados por función: inspección, comparación, búsqueda, extracción, transformación, división/unión, conversión y formato.
Recuerda: las cadenas son inmutables. Cada método que se muestra a continuación devuelve una nueva cadena (u otro valor); nunca modifica la cadena sobre la que se llama. Eso significa que una llamada como s.toUpperCase(); por sí sola no hace nada útil; debes capturar el resultado:
String s = "hello";
s.toUpperCase(); // result discarded — s is still "hello"
s = s.toUpperCase(); // s is now "HELLO"Los índices son de base cero y cuentan unidades de código UTF-16, no caracteres percibidos por el usuario, lo cual importa para los emoji y otros caracteres suplementarios.
Inspeccionar una cadena
| Método | Qué devuelve |
|---|---|
length() | número de unidades de código UTF-16 |
isEmpty() | true si la longitud es 0 |
isBlank() (Java 11+) | true si la longitud es 0 o solo contiene espacios en blanco |
charAt(int i) | el carácter en el índice i |
codePointAt(int i) | el punto de código Unicode en el índice i |
"hello".length(); // 5
"".isEmpty(); // true
" ".isBlank(); // true
"hello".charAt(1); // 'e'Comparar cadenas
| Método | Qué devuelve |
|---|---|
equals(other) | true si el contenido es igual |
equalsIgnoreCase(other) | igualdad sin distinción de mayúsculas/minúsculas |
compareTo(other) | orden lexicográfico: negativo / 0 / positivo |
compareToIgnoreCase(other) | igual, ignorando mayúsculas/minúsculas |
"hi".equals("hi"); // true
"HI".equalsIgnoreCase("hi"); // true
"apple".compareTo("banana"); // negativeSiempre prefiere .equals() sobre == para comparar contenido (Operadores de comparación). == compara referencias a objetos — si dos variables apuntan al mismo objeto — no los caracteres internos. Como Java internaliza los literales de cadena, == a veces parece funcionar, pero falla en el momento en que una cadena se construye en tiempo de ejecución:
String a = "hi";
String b = "hi";
String c = new String("hi");
a == b; // true — both point to the same interned literal
a == c; // false — c is a different object
a.equals(c); // true — same contentscompareTo es lo que necesitas para ordenar: devuelve un número negativo, cero o un número positivo, por lo que encaja directamente en Collections.sort o en cadenas de Comparator.
Buscar
| Método | Qué devuelve |
|---|---|
contains(seq) | true si seq aparece en cualquier lugar |
indexOf(seq) | primer índice donde comienza seq, o -1 |
indexOf(seq, fromIndex) | igual, comenzando en fromIndex |
lastIndexOf(seq) | último índice donde comienza seq, o -1 |
startsWith(prefix) | true si la cadena comienza con prefix |
endsWith(suffix) | true si la cadena termina con suffix |
String s = "abc-xyz-abc";
s.contains("xyz"); // true
s.indexOf("abc"); // 0
s.lastIndexOf("abc"); // 8
s.startsWith("abc"); // true
s.endsWith("xyz"); // falseExtraer subcadenas
| Método | Qué devuelve |
|---|---|
substring(start) | desde el índice start hasta el final |
substring(start, end) | desde start (inclusive) hasta end (exclusive) |
String s = "Hello, World!";
s.substring(7); // "World!"
s.substring(7, 12); // "World"Los índices negativos no están permitidos; lanzan StringIndexOutOfBoundsException.
Transformar
| Método | Qué devuelve |
|---|---|
toUpperCase() | copia en mayúsculas |
toLowerCase() | copia en minúsculas |
trim() | copia sin espacios en blanco ASCII al inicio/final |
strip() (Java 11+) | copia sin espacios en blanco Unicode al inicio/final |
replace(old, new) | cada coincidencia literal reemplazada |
replaceAll(regex, replacement) | reemplazo basado en regex |
replaceFirst(regex, replacement) | regex, solo la primera coincidencia |
repeat(n) (Java 11+) | la cadena repetida n veces |
concat(other) | idéntico a s + other |
" hello ".strip(); // "hello"
"banana".replace("a", "_"); // "b_n_n_"
"hello".repeat(3); // "hellohellohello"
"abc 123".replaceAll("\\d", "*"); // "abc ***"Dividir y unir
| Método | Qué devuelve |
|---|---|
split(regex) | array de subcadenas |
split(regex, limit) | igual, pero limitado a limit partes |
String.join(sep, parts...) | método estático — une con separador |
chars() | IntStream de unidades de código UTF-16 |
lines() (Java 11+) | Stream<String> de líneas |
"a,b,c".split(","); // ["a","b","c"]
String.join("-", "a", "b", "c"); // "a-b-c"
String.join(",", List.of("a","b")); // "a,b"
"line1\nline2\nline3".lines().count(); // 3split acepta una regex, no una cadena simple, por lo que debes escapar los metacaracteres de regex: usa split("\\.") para dividir por un punto literal, no split(".") (que coincide con cualquier carácter y devuelve un array vacío). Las cadenas vacías al final se descartan por defecto; pasa un limit negativo (p. ej. split(",", -1)) para conservarlas.
Conversión
| Método | Qué devuelve |
|---|---|
toCharArray() | char[] con los caracteres de la cadena |
getBytes() | array de bytes UTF-8 (o codificación de la plataforma, según la sobrecarga) |
String.valueOf(any) | estático — convierte cualquier valor a cadena |
Integer.parseInt(s) | analiza una cadena y devuelve un int |
Double.parseDouble(s) | analiza una cadena y devuelve un double |
Boolean.parseBoolean(s) | analiza una cadena y devuelve un boolean |
String.valueOf(42); // "42"
Integer.parseInt("42"); // 42
Double.parseDouble("3.14"); // 3.14
"hello".toCharArray(); // {'h','e','l','l','o'}Los métodos parse* lanzan NumberFormatException si el texto no es un número válido, así que envuelve la entrada del usuario en un try/catch o valídala primero. A diferencia de parseInt, String.valueOf(null) es seguro — devuelve la cadena "null" en lugar de lanzar una excepción.
Formato
| Método | Qué devuelve |
|---|---|
String.format(fmt, args...) | estático — cadena formateada estilo printf |
formatted(args...) (Java 15+) | método de instancia, equivalente a format con this como fmt |
String.format("%s is %d", "Ada", 36); // "Ada is 36"
"%s is %d".formatted("Ada", 36); // "Ada is 36"Una demostración combinada
¿Qué sigue?
Concatenación de String en Java profundiza en +, concat y StringBuilder, incluido cuándo usar cada uno.