0Pricing
Java Academy · Aula

Substituindo com expressões regulares

replaceAll e referências retroativas.

Substituindo com expressões regulares é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

Substituindo com expressões regulares

As expressões regulares não servem apenas para pesquisar; também podem transformar texto. replaceAll substitui cada correspondência por uma cadeia de substituição.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("a1b22c333");
        System.out.println(m.replaceAll("#"));
    }
}

Atalho String.replaceAll

String.replaceAll(regex, replacement) é uma chamada conveniente de uma única linha que compila o padrão internamente.

public class Main {
    public static void main(String[] args) {
        String cleaned = "hello   world  again".replaceAll("\\s+", " ");
        System.out.println(cleaned);
    }
}

replaceFirst

replaceFirst substitui apenas a primeira correspondência, deixando as posteriores inalteradas.

public class Main {
    public static void main(String[] args) {
        String s = "cat cat cat".replaceFirst("cat", "dog");
        System.out.println(s);
    }
}

Referências a grupos nas substituições

Na cadeia de substituição, $1, $2 etc. inserem o texto capturado por esses grupos. Isso reorganiza ou reformata o conteúdo correspondente.

public class Main {
    public static void main(String[] args) {
        String iso = "30/05/2026".replaceAll("(\\d{2})/(\\d{2})/(\\d{4})", "$3-$2-$1");
        System.out.println(iso);
    }
}

Referências a grupos nomeados

Você também pode referenciar grupos nomeados na substituição com ${name}.

public class Main {
    public static void main(String[] args) {
        String r = "alice@example.com"
            .replaceAll("(?<user>\\w+)@(?<host>[\\w.]+)", "${user} at ${host}");
        System.out.println(r);
    }
}

Escapando cifrão e barra invertida

Como $ e \ têm significado especial nas substituições, faça o escape de um cifrão literal como \$. Matcher.quoteReplacement faz esse escape para você.

import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        String price = "100".replaceAll("\\d+", Matcher.quoteReplacement("$100"));
        System.out.println(price);
    }
}

Substituições calculadas com a função replaceAll

Desde o Java 9, Matcher.replaceAll pode receber uma função, permitindo calcular cada substituição a partir da correspondência.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("a1 b2 c3");
        String out = m.replaceAll(mr -> String.valueOf(Integer.parseInt(mr.group()) * 10));
        System.out.println(out);
    }
}

Convertendo palavras correspondentes para maiúsculas

A forma com função é especialmente útil quando a substituição depende do texto correspondente, como ao converter cada palavra para maiúsculas.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\b\\w").matcher("hello there world");
        String title = m.replaceAll(mr -> mr.group().toUpperCase());
        System.out.println(title);
    }
}

appendReplacement e appendTail

Para ter controle total, use um laço com find e construa a saída por meio de appendReplacement e depois appendTail. Essa é a técnica clássica de baixo nível.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+").matcher("a1b2");
        StringBuilder sb = new StringBuilder();
        while (m.find()) {
            m.appendReplacement(sb, "[" + m.group() + "]");
        }
        m.appendTail(sb);
        System.out.println(sb);
    }
}

Retroreferências no padrão

As retroreferências no padrão (\1) correspondem a texto repetido, sendo úteis para eliminar palavras duplicadas durante a substituição.

public class Main {
    public static void main(String[] args) {
        String fixed = "the the end end".replaceAll("\\b(\\w+) \\1\\b", "$1");
        System.out.println(fixed);
    }
}

Removendo caracteres indesejados

Uma utilização frequente é higienizar a entrada, substituindo tudo que estiver fora de um conjunto permitido por uma cadeia vazia.

public class Main {
    public static void main(String[] args) {
        String digits = "(555) 123-4567".replaceAll("[^0-9]", "");
        System.out.println(digits);
    }
}

Verificação rápida

Em uma cadeia de substituição para replaceAll, o que significa $2?

Recapitulação

Você transformou texto com expressões regulares:

  • replaceAll e replaceFirst substituem correspondências; String oferece atalhos.
  • $1 / ${name} inserem grupos capturados nas substituições; faça o escape de um $ literal como \$ ou por meio de quoteReplacement.
  • A forma com função de replaceAll calcula as substituições a partir de cada correspondência.
  • appendReplacement + appendTail oferecem controle manual total.

Perguntas Frequentes

A aula “Substituindo com expressões regulares” é grátis?

Sim — o texto completo de “Substituindo com expressões regulares” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Substituindo com expressões regulares”?

replaceAll e referências retroativas. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Substituindo com expressões regulares”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Compilando padrões
  2. Localizando e fazendo correspondências
  3. Grupos de captura
  4. Substituindo com expressões regulares
← Voltar para Java Academy