Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Resolução

/**
 * Roberto está desenvolvendo um sistema de cadastro de clientes e precisa validar os
 * números de CPF fornecidos. Ele quer um programa que verifique se o CPF está no 
 * formato correto (XXX.XXX.XXX-XX).
 *
 * Crie um programa que receba um CPF e exiba uma mensagem indicando se o CPF está no formato válido.
 *
 * Exemplo de entrada:
 * Digite o CPF: 123.456.789-09
 *
 * Saída esperada:
 * O CPF 123.456.789-09 está no formato válido.
 */

package com.github.lucasdevrj.exercicios.validandocpf;

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

public class Validacao {

    private String cpf;

    private String getCpf() {
        return cpf;
    }

    private void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public void validarCpf() {
        Scanner entrada = new Scanner(System.in);

        System.out.print("Digite o CPF: ");
        setCpf(entrada.nextLine());

        Pattern padrao = Pattern.compile("\\d{3}+.\\d{3}+.\\d{3}-\\d{2}");
        Matcher achador = padrao.matcher(getCpf());

        entrada.close();

        if (achador.matches()) {
            System.out.printf("O CPF %s está no formato válido.", getCpf());
        } else {
            System.out.println("Formato inválido.");
        }

    }

}

package com.github.lucasdevrj.exercicios.validandocpf;

public class Principal {
    public static void main(String[] args) {
        Validacao validacao = new Validacao();
        validacao.validarCpf();
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Beleza?

1 resposta

Boa noite, Lucas! Tranquilo?

Gostei demais da sua solução, continue assim!

Mandou muito bem explorando o regex para validar o formato de CPF com Java, aplicou de maneira eficiente o Pattern para definir a expressão regular e entendeu como usar o Matcher para verificar se a entrada corresponde ao padrão esperado.

E um detalhe curioso para aprimorar seria ajustar a expressão regular para escapar corretamente os pontos e garantir maior precisão. Exemplo:

Pattern padrao = Pattern.compile("\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}");

Isso faz com que o programa valide o CPF exatamente no formato XXX.XXX.XXX-XX.

Para aprimorar suas soluções, algumas boas práticas são:

  • Feedback claro: informar ao usuário o motivo da invalidez (formato ou cálculo).
  • Validação adicional: além do formato, verificar se o CPF é válido matematicamente.
  • Reuso: encapsular a lógica de validação em um método estático para facilitar manutenção.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: o que você gostaria de praticar mais agora, implementar a validação matemática completa do CPF ou criar uma classe utilitária para centralizar diferentes tipos de validações?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!