Нечувствительное к регистру соответствие в инструкции Java switch-case

мне было интересно, есть ли способ выполнить нечувствительное к регистру совпадение в инструкции Java switch case. реализация по умолчанию регистр. См. пример ниже.

public class SwitchCaseTest {

    /**
     * @param args
     */
     public static void main(String[] args) {

        switch ("UPPER") {
            case  "upper" :
                System.out.println("true");
                break;

            default:
                System.out.println("false");
                break;
        }
    }
}

таким образом, выше оператор возвращает false в качестве выходного. И я пытаюсь заставить его работать на регистр матч String.equalsIgnoreCase() будет делать. Я попытался преобразовать строковый литерал в нижний регистр, а затем сравнить. но не смог этого сделать.

3 ответов


если вы хотите сделать это: просто убедитесь, что входные данные во всех строчных и строчных случаях...

switch ("UPPER".toLowerCase()) {
case  "upper" :

....

проблемы локализации

кроме того, вековая проблема локализации снова поражает и поражает эту вещь... Например, в турецком языке верхний регистр соответствует i не I, а İ... А взамен ... --2--> не превращается в i, но "dotless i":ı. Не стоит недооценивать это, это может быть смертельная ошибка...


вы пытаетесь сделать все в верхнем или нижнем регистре

String str = "something".toUpperCase();
switch(str){
case "UPPER":
}

или

String str = "something".toLowerCase();
swtich(str){
case "lower":
}

или даже лучше использовать перечисление (обратите внимание, что это возможно только из Java 7)

enum YourCases {UPPER1, UPPER2} // cases.
YourCases c = YourCases.UPPER1; // you will probably get this value from somewhere
switch(c){
case YourCases.UPPER1: ....
break;
case YourCases.UPPER2: ....
}

попробовать

switch ("UPPER".toUpperCase()) {
    case  "UPPER" :