web-dev-qa-db-fra.com

Correspondance insensible à la casse dans Java instruction switch-case

Je me demandais s'il existe un moyen d'effectuer une correspondance insensible à la casse dans Java instruction switch case. L'implémentation par défaut est sensible à la casse. Veuillez consulter l'exemple ci-dessous.

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;
        }
    }
}

L'instruction ci-dessus renvoie donc false en sortie. Et j'essaye de le faire fonctionner pour insensible à la casse correspondre comme le ferait String.equalsIgnoreCase(). J'ai essayé de convertir la chaîne littérale en minuscules, puis de comparer. mais n'a pas pu le faire.

15
Punith Raj

Si vous voulez le faire: assurez-vous simplement que les données d'entrée sont en minuscules et utilisez des minuscules ...

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

....

Problèmes de localisation

En outre, le problème séculaire de la localisation frappe à nouveau, et afflige cette chose aussi ... Par exemple, dans les paramètres régionaux turcs, l'homologue majuscule de i n'est pas I, mais İ... Et en retour, le I n'est pas transformé en i, mais un "i sans point": ı. Ne sous-estimez pas cela, cela peut être ne erreur mortelle ...

52
ppeterka

Vous essayez de tout mettre en majuscules ou en minuscules

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

ou

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

ou encore mieux utiliser enum (notez que cela n'est possible qu'à partir de 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

essayer

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

Pour éviter d'avoir à utiliser l'expression case pour vérifier si elle est en minuscule ou en majuscule, je vous recommande d'utiliser ce qui suit:

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

Cela permet de convertir les minuscules en majuscules avant d'effectuer l'évaluation dans le cas du commutateur.

0
Chris Michael