在Java 7中切换忽略大小写

48

我正在研究Java 7的新特性。我有使用字符串在switch语句中的代码,并且它可以运行。我想让它在不区分大小写的情况下也能工作。有没有一种方法可以检查忽略大小写的字符串?

package com.java.j7;

public class Test {
    final private String _NEW ="NEW";
    final private String _PENDING = "PENDING";
    final private String _CLOSED = "CLOSED";
    final private String _REJECTED ="REJECTED";

public static void main(String... strings){

    Test j = new Test();
    j.processItem("new");
    j.processItem("pending");
    j.processItem("closed");
    j.processItem("rejected");

}

void processItem(String s){
    switch (s) {
    case _NEW:
        System.out.println("Matched to new");
        break;
    case _PENDING:
        System.out.println("Matched to pending");
        break;
    case _CLOSED:
        System.out.println("Matched to closed");
        break;
    case _REJECTED:
        System.out.println("Matched to rejected");
        break;

    default:
        System.out.println("Not matching any more");
        break;
    }

}
}
3个回答

110

不行,但是你可以使用s.toUpperCase()。所以:

switch (s.toUpperCase()) {
   //same as before
}

而且,如果我们要挑剔的话,在英语语境下,你最好把事物写成大写字母以避免土耳其语环境下的问题


在这种情况下,我建议使用s.toUpperCase,因为匹配项是大写的 ;) - MadProgrammer
我最初也包括了将常量转换为小写的代码,但是大写更简单。 - radai
2
今天,在这些情况下,我更喜欢使用 Locale.ROOT 来记录这些硬编码常量实际上并不是英语文化问题。它是在Java 6中添加的。顺便说一句,今天有比土耳其语更多具有特殊情况匹配行为的区域设置。 - Holger

9

在switch语句中使用字符串,来自oracle文档《使用字符串在switch语句中》

 public class StringSwitchDemo {

        public static int getMonthNumber(String month) {

            int monthNumber = 0;

            if (month == null) {
                return monthNumber;
            }

            switch (month.toLowerCase()) {
                case "january":
                    monthNumber = 1;
                    break;
                case "february":
                    monthNumber = 2;
                    break;
                case "march":
                    monthNumber = 3;
                    break;
                case "april":
                    monthNumber = 4;
                    break;
                case "may":
                    monthNumber = 5;
                    break;
                case "june":
                    monthNumber = 6;
                    break;
                case "july":
                    monthNumber = 7;
                    break;
                case "august":
                    monthNumber = 8;
                    break;
                case "september":
                    monthNumber = 9;
                    break;
                case "october":
                    monthNumber = 10;
                    break;
                case "november":
                    monthNumber = 11;
                    break;
                case "december":
                    monthNumber = 12;
                    break;
                default: 
                    monthNumber = 0;
                    break;
            }

            return monthNumber;
        }

        public static void main(String[] args) {

            String month = "August";

            int returnedMonthNumber =
                StringSwitchDemo.getMonthNumber(month);

            if (returnedMonthNumber == 0) {
                System.out.println("Invalid month");
            } else {
                System.out.println(returnedMonthNumber);
            }
        }
    }

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接