Java – Switch sobre una cadena

julio 12, 2010

En Java no hay forma de hacer un switch sobre una cadena, sin embargo, esta funcionalidad es comun en otros lenguajes.  En java, podemos emular esto de las siguientes maneras con el uso de una enumeración:

public enum Day
{
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY;
}

Dada la enumeracion anterior, podemos hacer el switch de la siguiente forma:

switch (Day.valueOf(str))
{
    case SATURDAY:             
    case SUNDAY:
        // weekend processing …
        break;
    default:
        // weekday processing …
}

El problema con el código anterior es que el método Enum.valueof() lanza una excepción de tipo IllegalArgumentException si la cadena que pasamos como parámetro no corresponde a un valor de la enumeración o NullPointerException si le pasamos un null. Podemos crear un método que atrape estas excepciones y regrese un valor por default.

public enum Day
{
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY,
    NOVALUE;

    public static Day toDay(String str)
    {
        try {
            return valueOf(str);
        }
        catch (IllegalArgumentException ex) {
            return NOVALUE;
        }
    }  
}

Entonces el switch quedaría de la siguiente forma:

switch (Day.toDay(str))
{
    case SUNDAY:               
    case MONDAY:
    case TUESDAY:
        // etc …
    default:
        // any non-Day value
}

Otra manera de implementar la enumeración, pero sin utilizar Excepciones, sería la siguiente:

public enum Day
{
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY,
    NOVALUE;

    public static Day toDay(String str)
    {
        for(Day day:EnumSet.allOf(Day.class)){
       
        if(day.toString().equals(str)){
       
       
        return day;
       
        }
        }
        return Day.NOVALUE;
    }  
}

Fuentes:
Xefer
stackoverflow

Anuncios

4 comentarios to “Java – Switch sobre una cadena”

  1. santos Says:

    Gracias por la explicación es una gran manera de implementar swhitch para cadenas en java.

  2. Alejandro Says:

    Perfecto, me ha servido de mucho, el meter los valores en un enum, me sirvio tambien para identificar valores que tenia repetidos.

  3. Alejandro Says:

    gracias por compartir!

  4. aht Says:

    buen ejemplo


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: