2011-11-11 10 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; 
     } 
    } 
} 

正規表現がオフであるか、case文で正しく使用されていないようです。私が欲しいのは、次のような文字列です。正確に1つの大文字で始まり、正確に2つの小文字が続き、少なくとも1つの数字が続きます。regexをJavaのswitch文に使用する

私はregex APIをチェックアウトし、3つのバリエーション(欲張り、嫌悪感、所有量の限定子)を使いこなしてみました。私の必要性に関係するような方法を見つけずにStringのメソッドもチェックしました。

+2

これはJava 7の新機能ですか?正規表現でスイッチします。 Java 6以降ではこのようなことはありません。 – gigadot

+1

6以下の文字列スイッチもありません(積分と列挙体のみ) –

+0

はい - これはスイッチのルールを破っていると思われます。だから良い 'ol if/else if文? – jollyroger

答えて

23

スイッチのケースとして正規表現を使用することはできません。 (それについて考える:文字列"[A-Z]{1}[a-z]{2}\\d{1,}"または正規表現と一致させるかどうかをJavaがどのように認識するか)

あなたが行うことができるのは、デフォルトの場合に正規表現と一致するかどうかです。

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

(ところで、これは以降のみのJava 7で動作します。その前に、文字列には切り替えがありません。)

+0

ケースを扱う素晴らしい方法:) –

4

私はあなたのスイッチケースで正規表現を使用することができるとは思いません。

スイッチ式の文字列を表現と比較さ String.equals方法は が使用されたかのように、それぞれの場合のラベルに関連付けられています。

詳細については、http://download.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.htmlを参照してください。

+0

switch-statementsの理解を深めてくれてありがとう。 – jollyroger

関連する問題