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

/**
 * Pedro está desenvolvendo um sistema de controle de produtos e precisa verificar
 * se os códigos de referência dos produtos seguem o formato correto. O formato do
 * código de referência é composto por:
 *
 * 3 letras maiúsculas
 * Um hífen
 * 4 dígitos numéricos
 *
 * Crie um programa que receba um código de referência e informe se ele
 * está no formato correto.
 *
 * Exemplo de entrada:
 * Digite o código de referência: ABC-1234
 *
 * Saída esperada:
 * O código de referência está válido.
 */

package com.github.lucasdevrj.exercicios.validandocodigosdereferencia;

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

public class Validacao {

    private String codigoReferencia;

    private String getCodigoReferencia() {
        return codigoReferencia;
    }

    private void setCodigoReferencia(String codigoReferencia) {
        this.codigoReferencia = codigoReferencia;
    }

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

        System.out.print("Digite o código de referência: ");
        setCodigoReferencia(entrada.nextLine());

        entrada.close();

        System.out.println(formataCodigoReferencia());
    }

    private String formataCodigoReferencia() {
        String regex = "([A-Z]{3})(-)(\\d{4})";
        Pattern padrao = Pattern.compile(regex);
        Matcher procurador = padrao.matcher(getCodigoReferencia());

        if (procurador.matches()) {
            return "O código de referência está válido.";
        }

        return "Código inválido.";
    }
}
package com.github.lucasdevrj.exercicios.validandocodigosdereferencia;

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

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

Oi, Lucas. Tudo bem com você?

A expressão que você usou garante três letras maiúsculas, o hífen e quatro dígitos numéricos. Como você utilizou matches(), a validação considera a string inteira, o que é importante nesse caso. Assim, ABC-1234 é aceito, enquanto valores como AB-1234, ABC-123 ou abc-1234 não passam na validação.

Também foi interessante separar a criação do Pattern e do Matcher dentro da lógica de validação. Como dica para continuar praticando Regex, vale experimentar pequenas mudanças na expressão e observar como elas afetam os resultados. Por exemplo, trocar [A-Z]{3} por [A-Za-z]{3} permitiria letras minúsculas, enquanto alterar \\d{4} para \\d{5} passaria a exigir cinco dígitos.

Que outras regras você conseguiria adicionar a esse código usando Regex, como permitir um prefixo específico ou exigir que os números começassem com determinado valor?

Obrigado por compartilhar seu exercício e continue praticando e trazendo suas soluções para o fórum. O espaço fica à disposição para acompanhar sua evolução nos estudos.

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