Case insensitive matching in Java switch-case statement

52,040

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.

Share:
52,040
Punith Raj
Author by

Punith Raj

3 years of Experience in Java J2EE Development

Updated on July 11, 2022

Comments

  • Punith Raj
    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 like String.equalsIgnoreCase() would do. I tried to convert both the string literal to lower case and then compare. but was unable to do so.