Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

Enum Especialidad - mejorada

Hola a todas y a todos. Les comparto el siguiente código del Enum de Especialidad con el cual desde el front-end pueden usar minúsculas, mayúsculas, acentos o sin acentos las especialidades. Espero les sirva.

import com.fasterxml.jackson.annotation.JsonCreator;

import java.text.Normalizer;

public enum Especialidad {
    ORTOPEDIA,
    CARDIOLOGIA,
    GINECOLOGIA,
    DERMATOLOGIA;

    /**
     * Busca una especialidad basándose en una cadena de entrada,
     * manejando mayúsculas/minúsculas, acentos y espacios.
     *
     * @param input La cadena de entrada a buscar.
     * @return La especialidad correspondiente si se encuentra, o null si no.
     */
    @JsonCreator
    public static Especialidad fromString(String input) {
        if (input == null || input.trim().isEmpty()) {
            return null;
        }

        // 1. Normalizar a NFD y quitar diacríticos (acentos)
        String normalizedInput = Normalizer.normalize(input, Normalizer.Form.NFD)
                .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");

        // 2. Convertir a mayúsculas para comparación sin distinción de mayúsculas/minúsculas
        String upperCaseInput = normalizedInput.toUpperCase().trim();

        for (Especialidad especialidad : Especialidad.values()) {
            // Normalizar también el nombre del enum para la comparación
            String normalizedEnumName = Normalizer.normalize(especialidad.name(), Normalizer.Form.NFD)
                    .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
            if (normalizedEnumName.equals(upperCaseInput)) {
                return especialidad;
            }
        }
        return null; // No se encontró una especialidad coincidente
    }


}