W3docs

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étodoO 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étodoO 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");        // negative

Prefira 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 contents

compareTo é 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étodoO 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");       // false

Fatiando

MétodoO 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étodoO 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étodoO 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();  // 3

split 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étodoO 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étodoO 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

java— editable, runs on the server

O que vem a seguir

Concatenação de String em Java aprofunda +, concat e StringBuilder, incluindo quando cada um é a ferramenta certa.

Prática

Prática
Qual método retorna true se uma string contiver apenas espaços em branco?
Qual método retorna true se uma string contiver apenas espaços em branco?
Was this page helpful?