Нечувствительное к регистру соответствие в инструкции 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: ....
}