Métodos de String em Java
Referência dos principais métodos de String em Java — length, charAt, substring, indexOf, replace, split, toUpperCase, trim e mais.
A classe String possui dezenas de métodos. Este capítulo é uma referência prática dos que você realmente vai usar, agrupados pelo que fazem: inspecionar, comparar, pesquisar, fatiar, transformar, dividir/juntar, converter e formatar.
Lembre-se: strings são imutáveis. Cada método abaixo retorna uma nova string (ou outro valor) — ele nunca altera a string sobre a qual foi chamado. Isso significa que uma chamada como s.toUpperCase(); sozinha não faz nada útil; você precisa capturar o resultado:
String s = "hello";
s.toUpperCase(); // result discarded — s is still "hello"
s = s.toUpperCase(); // s is now "HELLO"Os índices são baseados em zero e contam unidades de código UTF-16, não caracteres percebidos pelo usuário, o que importa para emojis e outros caracteres suplementares.
Inspecionando uma string
| Método | O que retorna |
|---|---|
length() | número de unidades de código UTF-16 |
isEmpty() | true se o comprimento for 0 |
isBlank() (Java 11+) | true se o comprimento for 0 ou contiver apenas espaços em branco |
charAt(int i) | o caractere no índice i |
codePointAt(int i) | o ponto de código Unicode no índice i |
"hello".length(); // 5
"".isEmpty(); // true
" ".isBlank(); // true
"hello".charAt(1); // 'e'Comparando strings
| Método | O que retorna |
|---|---|
equals(other) | true se o conteúdo for igual |
equalsIgnoreCase(other) | igualdade sem distinção de maiúsculas/minúsculas |
compareTo(other) | ordenação lexicográfica negativa / 0 / positiva |
compareToIgnoreCase(other) | igual, ignorando maiúsculas/minúsculas |
"hi".equals("hi"); // true
"HI".equalsIgnoreCase("hi"); // true
"apple".compareTo("banana"); // negativePrefira sempre .equals() em vez de == para comparação de conteúdo (Operadores de Comparação). == compara referências de objetos — se duas variáveis apontam para o mesmo objeto — não os caracteres dentro deles. Como o Java interna literais de string, == às vezes parece funcionar, mas falha no momento em que uma string é construída em tempo de execução:
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 é o que você precisa para ordenação: retorna um número negativo, zero ou um número positivo, então se encaixa diretamente em Collections.sort ou cadeias de Comparator.
Pesquisando
| Método | O que retorna |
|---|---|
contains(seq) | true se seq aparecer em qualquer lugar |
indexOf(seq) | primeiro índice onde seq começa, ou -1 |
indexOf(seq, fromIndex) | mesmo, a partir de fromIndex |
lastIndexOf(seq) | último índice onde seq começa, ou -1 |
startsWith(prefix) | true se a string começar com prefix |
endsWith(suffix) | true se a string terminar com 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"); // falseFatiando
| Método | O que retorna |
|---|---|
substring(start) | do índice start até o fim |
substring(start, end) | de start (inclusive) até end (exclusive) |
String s = "Hello, World!";
s.substring(7); // "World!"
s.substring(7, 12); // "World"Índices negativos não são permitidos — eles lançam StringIndexOutOfBoundsException.
Transformando
| Método | O que retorna |
|---|---|
toUpperCase() | cópia em maiúsculas |
toLowerCase() | cópia em minúsculas |
trim() | cópia sem espaços em branco ASCII iniciais/finais |
strip() (Java 11+) | cópia sem espaços em branco Unicode iniciais/finais |
replace(old, new) | toda correspondência literal substituída |
replaceAll(regex, replacement) | substituição baseada em regex |
replaceFirst(regex, replacement) | regex, somente a primeira correspondência |
repeat(n) (Java 11+) | a string repetida n vezes |
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 ***"Dividindo e juntando
| Método | O que retorna |
|---|---|
split(regex) | array de substrings |
split(regex, limit) | mesmo, mas limitado a limit partes |
String.join(sep, parts...) | método estático — junta com separador |
chars() | IntStream de unidades de código UTF-16 |
lines() (Java 11+) | Stream<String> de linhas |
"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 recebe uma regex, não uma string simples — por isso escape os meta-caracteres de regex: use split("\\.") para dividir em um ponto literal, não split(".") (que corresponde a todo caractere e retorna um array vazio). Strings vazias no final são descartadas por padrão; passe um limit negativo (ex.: split(",", -1)) para mantê-las.
Conversão
| Método | O que retorna |
|---|---|
toCharArray() | char[] dos caracteres da string |
getBytes() | array de bytes UTF-8 (ou codificação da plataforma, dependendo da sobrecarga) |
String.valueOf(any) | estático — converte qualquer valor em string |
Integer.parseInt(s) | analisa uma string em um int |
Double.parseDouble(s) | analisa uma string em um double |
Boolean.parseBoolean(s) | analisa uma string em um boolean |
String.valueOf(42); // "42"
Integer.parseInt("42"); // 42
Double.parseDouble("3.14"); // 3.14
"hello".toCharArray(); // {'h','e','l','l','o'}Os métodos parse* lançam NumberFormatException se o texto não for um número válido, então envolva a entrada do usuário em um try/catch ou valide-a primeiro. Diferentemente de parseInt, String.valueOf(null) é seguro — retorna a string "null" em vez de lançar uma exceção.
Formatando
| Método | O que retorna |
|---|---|
String.format(fmt, args...) | estático — string formatada no estilo printf |
formatted(args...) (Java 15+) | método de instância, igual a format com this como fmt |
String.format("%s is %d", "Ada", 36); // "Ada is 36"
"%s is %d".formatted("Ada", 36); // "Ada is 36"Uma demonstração combinada
O que vem a seguir
Concatenação de String em Java aprofunda +, concat e StringBuilder, incluindo quando cada um é a ferramenta certa.