Como dividir uma string em Java: guia completo para iniciantes e profissionais

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

«Ajude, não consigo dividir uma string!» — a história de um problema

\n\n

Imagine: você está escrevendo em Java um parser de logs, processando um arquivo CSV ou apenas querendo dividir uma entrada do usuário em palavras. E então — pára. Como fazer isso? Se você já pesquisou no Google «How do I split a string in Java», sabe que esta pergunta no Stack Overflow acumulou centenas de milhares de visualizações. Não porque os programadores Java são preguiçosos, mas porque split() é algo poderoso, mas com armadilhas.

\n\n

Neste artigo, vamos abordar a divisão de strings em Java do início ao fim. Você aprenderá como o método split() funciona, quais surpresas as expressões regulares reservam e como não pisar nos mesmos erros que esperam por cada segundo iniciante. Vamos nessa!

\n\n

Método split(): sua principal ferramenta

\n\n

A classe String em Java oferece duas variantes sobrecarregadas do método split():

\n\n
public String[] split(String regex)\npublic String[] split(String regex, int limit)
\n\n

A primeira variante aceita uma expressão regular e retorna um array de strings. A segunda — a mesma coisa, mas com um limite no número de partes. Parece simples? Vamos ver exemplos.

\n\n

Exemplo básico: divisão por espaço

\n\n
public class SplitExample {\n    public static void main(String[] args) {\n        String text = "Java divide strings facilmente";\n        String[] words = text.split(" ");\n        \n        for (String word : words) {\n            System.out.println(word);\n        }\n    }\n}
\n\n

Saída:

\n
Java\ndivide\nstrings\nfacilmente
\n\n

Funciona? Funciona. Mas e se você tiver vários espaços seguidos? Então, strings vazias vão parar no array. Desagradável, não é?

\n\n

Dividindo uma string em Java por vírgula (CSV)

\n\n

Uma das tarefas mais comuns é dividir uma string em Java por vírgula. Suponha que você tenha uma string CSV:

\n\n
String csv = "maçã,pêra,banana,laranja";\nString[] fruits = csv.split(",");\n\nfor (String fruit : fruits) {\n    System.out.println(fruit.trim()); // trim() remove espaços extras\n}
\n\n

Saída:

\n
maçã\npêra\nbanana\nlaranja
\n\n

Observe: adicionamos trim(), porque em dados reais, após a vírgula, muitas vezes vêm espaços. Sem isso, você obterá " maçã" com um espaço à esquerda — e depois ficará se perguntando por que as strings não coincidem.

\n\n

Expressões regulares: magia e dor

\n\n

O método split() aceita uma expressão regular. Isso oferece uma enorme flexibilidade, mas exige cuidado. Vamos considerar cenários populares.

\n\n

Divisão por ponto

\n\n

Quer dividir um endereço IP "192.168.1.1"? O código ingênuo str.split(".") não funcionará. Por quê? Porque o ponto em expressões regulares é um caractere especial, significando «qualquer caractere». Como resultado, você obterá um array de strings vazias.

\n\n

A solução correta é escapar o ponto:

\n\n
String ip = "192.168.1.1";\nString[] parts = ip.split("\\\\."); // Barra invertida dupla!\n\nfor (String part : parts) {\n    System.out.println(part);\n}\n// Saída: 192 168 1 1
\n\n

Lembre-se: em Java, para escapar em expressões regulares, usa-se barra invertida dupla \\\\. Uma barra simples \\ é um caractere de controle para a string, e a dupla já é para o regex.

\n\n

Divisão por vários delimitadores

\n\n

O que fazer se a string contiver vírgulas, ponto e vírgula e espaços? Use uma classe de caracteres entre colchetes:

\n\n
String messy = "maçã;pêra,banana laranja";\nString[] items = messy.split("[;,\\\\s]+"); // ; ou , ou caracteres de espaço\n\nfor (String item : items) {\n    System.out.println(item);\n}\n// Saída: maçã pêra banana laranja
\n\n

O sinal + significa «um ou mais» — isso garante que uma sequência de delimitadores não crie

Blogs

Book Recommendations