gibt es switch's die mit Strings umgehen können?

Nekros

Grünschnabel
Hi Ich hatte schon öfter das Problem das switch's meines Wissens nach keine Stringst Interpretieren können und wollte mal fragen ob es eine Möglichkeit gibt bei der das kein Problem ist?
 
Hallo!

Bei switches gibt es so direkt eigentlich keine Unterstützung für Strings, jedoch könnte man sich mit einem Trick behelfen:
Code:
/*
 * Created on 13.10.2004
 */
package de.tutorials;

/**
 * @author Darimont
 *  
 */
public class Test10 {

    private final static String ABC = "abc";

    private final static String DEF = "def";

    private final static String GHI = "ghi";

    private final static String JKL = "jkl";

    private final static String MNO = "mno";

    private final static String PQR = "pqr";

    public static void main(String[] args) {

        int s = "mno".hashCode();
        switch (s) {
        case 96354: //"abc".hashCode()
            System.out.println("abc action");
            break;
        case 99333: //"def".hashCode()
            System.out.println("def action");
            break;
        case 102312: //"ghi".hashCode()
            System.out.println("ghi action");
            break;
        case 105291: //"jkl".hashCode()
            System.out.println("jkl action");
            break;
        case 108270: //"mno".hashCode()
            System.out.println("mno action");
            break;
        case 111249: //"pqr".hashCode()
            System.out.println("pqr action");
            break;
        default:
            System.out.println("default action");
        }

        //Aber ich denke das hier wäre dann doch etwas lesbarer:
        String str = "mno"; //oder String str = new String("mno").intern();

        if (ABC.equals(str)) {
            System.out.println("abc action");
        } else if (DEF.equals(str)) {
            System.out.println("def action");
        } else if (GHI.equals(str)) {
            System.out.println("ghi action");
        } else if (JKL.equals(str)) {
            System.out.println("jkl action");
        } else if (MNO.equals(str)) {
            System.out.println("mno action");
        } else if (PQR.equals(str)) {
            System.out.println("pqr action");
        } else { //Default
            System.out.println("default action");
        }
    }
}

gruß Tom
 
...interessant, mit dem Hashcode zu arbeiten! Problematisch wird die Sache nur, wenn Sun mal für Strings die Hashcodes anders erzeugt. :eek:

Soweit ich weiß, akzeptiert ein "switch" int-Werte, also auch char!
Natürlich ist es immernoch ziemlich umständlich, wenn man sich für jeden Buchstaben merken muß, wie der "switch" entschieden hat.

Die beste Lösung ist eben immernoch die "if-else"-Sache oder man benutzt IDs. :-)

Gruß schnuffie
 
Hallo!

Jap char Werte funktionieren auch ...
Code:
/*
 * Created on 15.10.2004
 */
package de.tutorials;

/**
 * @author Darimont
 *  
 */
public class Test16 {

    public static void main(String[] args) {
        char c = 'C';

        switch (c) {
        case 'A':
            System.out.println("A");
            break;
        case 'B':
            System.out.println("B");
            break;
        case 'C':
            System.out.println("C");
            break;
        default:

        }
    }
}

Gruß Tom
 
Zurück