2011-11-11 14 views
12
void menu() { 
    print(); 
    Scanner input = new Scanner(System.in); 
    while(true) { 
     String s = input.next(); 
     switch (s) { 
     case "m": print(); continue; 
     case "s": stat(); break; 
     case "[A-Z]{1}[a-z]{2}\\d{1,}": filminfo(s); break; 
     case "Jur1": filminfo(s); break; //For debugging - this worked fine 
     case "q": ; return; 
     } 
    } 
} 

Parece que mi expresión regular está desactivada o que no la estoy usando en el enunciado. Lo que quiero es una cadena que: comienza con exactamente una letra mayúscula y va seguida de dos letras minúsculas, seguidas de al menos un dígito.Uso de regex para switch-statement en Java

He comprobado la API de expresiones regulares y he probado las tres variantes (codificadores, reacios y cuantificadores posesivos) sin saber su uso correcto. También verifiqué los métodos para Cadena sin encontrar un método que pareciera pertinente a mis necesidades.

+2

¿Es esto algo nuevo en Java 7? cambiar con regex. No existe tal cosa en Java 6 o inferior. – gigadot

+1

ni siquiera hay ningún modificador de cadena en 6 y a continuación (solo integrales y enumeraciones) –

+0

Sí, sospeché que esto estaba rompiendo las reglas de conmutación. Así que a lo mejor 'ol if/else if-statements entonces? – jollyroger

Respuesta

23

No se puede usar una expresión regular como caja de conmutación. (Piénselo: ¿cómo sabe Java si quiere hacer coincidir la cadena "[A-Z]{1}[a-z]{2}\\d{1,}" o la expresión regular?)

Lo que podría hacer, en este caso, es tratar de hacer coincidir la expresión regular en su caso predeterminado.

switch (s) { 
     case "m": print(); continue; 
     case "s": stat(); break; 
     case "q": return; 
     default: 
      if (s.matches("[A-Z]{1}[a-z]{2}\\d{1,}")) { 
       filminfo(s); 
      } 
      break; 
    } 

(Por cierto, esto sólo funciona con Java 7 y versiones posteriores. No hay cambio en las cuerdas antes de eso.)

+0

Manera impresionante de manejar el estuche :) –