【问题标题】:Case insensitive matching in Java switch-case statementJava switch-case语句中不区分大小写的匹配
【发布时间】:2013-10-11 10:14:33
【问题描述】:

我想知道是否有办法在 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


    【解决方案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”,两种情况都会有相同的结果。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        你试着把所有东西都变成大写或小写

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

        【讨论】:

          【解决方案4】:

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

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

          本地化问题

          另外,老生常谈的本地化问题又来了,也困扰着这件事……例如,在土耳其语言环境中,i 的大写对应不是I,而是İ...作为回报,I 不会转换为 i,而是一个“无点 i”:ı。不要小看这个,可以是a deadly mistake...

          【讨论】:

          • 谢谢。我早些时候尝试过这个并且有效。但我想通过将键和大小写都转换为更低然后匹配来更确定..可以这样做吗?
          • @PunithRaj 不,你不能拥有像case "upper".toLowerCase() 这样的东西——你必须手工完成......
          • 投反对票:想解释一下吗?为什么你对这个问题的所有答案都投了反对票?
          【解决方案5】:

          试试

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-07-30
            • 1970-01-01
            • 2015-03-17
            • 1970-01-01
            • 1970-01-01
            • 2016-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多