web-dev-qa-db-ja.com

Java switch-caseステートメントでの大文字と小文字を区別しないマッチング

Java switch caseステートメント。デフォルトの実装はcasesensitiveです。以下の例を参照してください。

_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()がするようにcase-insensitiveマッチで動作させるようにしています。両方の文字列リテラルを小文字に変換して比較してみました。しかし、そうすることができませんでした。

15
Punith Raj

それをしたい場合:入力データがすべて小文字であることを確認し、小文字を使用してください...

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

....

ローカリゼーションの問題

また、古くなったローカライゼーションの問題が再び起こり、これもまた悩まされています...たとえば、トルコ語のロケールでは、iの大文字の対応物はIではなくİ...そしてIiに変換されず、「ドットなしのi」:ı。これを過小評価しないでください、それは致命的な間違い...になる可能性があります...

52
ppeterka

あなたはすべてを大文字または小文字にしてみます

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

試す

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

大文字と小文字の式を使用して小文字か大文字かを確認する必要がないように、以下を使用することをお勧めします。

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

これは、スイッチケースで評価を行う前に小文字を大文字に変換するのに役立ちます。

0
Chris Michael