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

问题描述 投票:14回答:4

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

java string switch-statement case-sensitive case-insensitive
4个回答
53
投票

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

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

....

Localization issues

此外,古老的本地化问题再次发生,并且也困扰这个问题......例如,在土耳其语Locale中,i的大写对应物不是I,而是İ ......作为回报,I没有变换到i,但是“无点的我”:ı。不要小看这个,它可以是a deadly mistake ...


2
投票

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

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: ....
}

0
投票

尝试

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

0
投票

为避免必须使用case表达式来验证它是小写还是大写,我建议您使用以下内容:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.