Case insensitive matching in Java switch-case statement
Solution 1
If you want to do that: just make sure the input data is in all lowercase, and use lowercase cases...
switch ("UPPER".toLowerCase()) {
case "upper" :
....
Localization issues
Also, the ages old issue of localization strikes again, and plagues this thing too... For example, in the Turkish Locale, the uppercase counterpart of i
is not I
, but İ
... And in return, the I
is not transformed to i
, but a "dotless i": ı
. Don't underestimate this, it can be a deadly mistake...
Solution 2
You try making everything uppercase or lowercase
String str = "something".toUpperCase();
switch(str){
case "UPPER":
}
or
String str = "something".toLowerCase();
swtich(str){
case "lower":
}
or even better use enum (note this is only possible from 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: ....
}
Solution 3
When using a switch statement you must use "break;" for it to exit the statement, so simply use two cases, one without a break.
switch(choice)
{
case 'I':
case 'i':
//Insert a name
System.out.print("Insert a name to add to the list: ");
input.nextLine();
name = input.nextLine();
nameList.insert(name);
System.out.println();
break;
This way, if either "I" or "i" are entered, both cases will have the same outcome.
Comments
-
Punith Raj almost 2 years
I was wondering if there is a way to perform case insensitive match in java switch case statement. the default implementation is case sensitive. Please see the example below.
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; } } }
So above statement returns
false
as output. And i am trying make it work for case-insensitive match likeString.equalsIgnoreCase()
would do. I tried to convert both the string literal to lower case and then compare. but was unable to do so.