Java switch-case语句中不区分大小写的匹配

时间:2013-10-04 12:08:06

标签: java string switch-statement case-sensitive case-insensitive

我想知道是否有办法在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()这样的不区分大小写的匹配。我试图将字符串文字转换为小写,然后比较。但是无法这样做。

5 个答案:

答案 0 :(得分:52)

如果你想这样做:只要确保输入数据全部为小写,并使用小写的情况......

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

....

本地化问题

此外,古老的本地化问题再次发生,并且也困扰着这个问题......例如,在土耳其语语言环境中,i的大写字母不是I,而是{{ 1}} ...作为回报,İ不会转换为I,而是转变为“无点我”:i。不要低估这一点,它可以是 a deadly mistake ......

答案 1 :(得分:2)

您尝试将所有内容都设为大写或小写

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

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

甚至更好地使用enum(注意这只能从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: ....
}

答案 2 :(得分:1)

当使用 switch 语句时,你必须使用“break;”让它退出语句,所以简单地使用两种情况,一种没有中断。

切换(选择)

        {

            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;

这样,如果输入“I”或“i”,两种情况都会有相同的结果。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

为避免不得不使用case表达式来验证它是小写还是大写,建议您使用以下代码:

String value = String.valueOf(userChoice).toUpperCase();

这有助于在转换大小写进行评估之前将小写转换为大写。