2013-10-28 3 views
21

Ich mache eine POC auf Java 7 neue Funktionen. Ich habe Code, um String in switch-Anweisung zu verwenden, und es funktioniert. Ich möchte, dass es funktioniert, auch wenn die Groß- und Kleinschreibung nicht beachtet wird. Gibt es eine Möglichkeit, mit ignoreCase auf String auschecken?Switch ignorieren Fall in Java 7

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

} 
} 

Antwort

53

nein, aber Sie könnten s.toUpperCase() einschalten. so:

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

und während wir pingelig, Sie besser Groß- Dinge im Englisch locale avoid issues with turkish

+0

In diesem Fall würde ich 's.toUpperCase' vorschlagen, da die Übereinstimmungen in Großbuchstaben sind;) – MadProgrammer

+0

ursprünglich enthielt ich Code, der auch die Konstanten lud, aber yeah, Großbuchstaben ist weniger Arbeit – radai

+2

Heute würde ich' Locale bevorzugen .ROOT' in diesem Fall, um die Tatsache zu dokumentieren, dass diese hartcodierten Konstanten nicht wirklich englische Kulturprobleme sind. Es wurde in Java 6 hinzugefügt. Übrigens gibt es heute mehr Gebietsschemas als Türkisch mit speziellem Fallvergleichsverhalten. – Holger

2

von Oracle docs switch with string

Der String im Schalter Ausdruck verglichen mit den Ausdrücken, die mit jeder Fallbezeichnung verknüpft sind, als ob die String#equals-Methode verwendet würde.

können Sie verwenden

switch(s.toUpperCase()){ 
... 
..... 
} 

Siehe auch

6

mit String in Schalter Beispiel von Oracle-docs Using Strings in switch Statements

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