2011-11-11 57 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-statement中正確使用它。我想要的是一個字符串:剛好有一個大寫字母,緊跟着兩個小寫字母,後面跟着至少一個數字。在Java中使用正則表達式切換語句

我已經檢出了正則表達式API,並且在不知道其正確使用的情況下嘗試了三種變體(貪婪,不情願和佔有量詞)。還檢查了字符串的方法,但未找到與我的需求相關的方法。

+2

這是Java 7中的新東西嗎?用正則表達式切換。 Java 6或以下沒有這樣的事情。 – gigadot

+1

在6及以下甚至沒有字符串開關(僅限積分和枚舉) –

+0

是的 - 我懷疑這是違反了開關規則。那麼,如果還有其他的if/else if語句呢? – jollyroger

回答

23

您不能將正則表達式用作開關盒。 (想想看:Java如何知道您是否想要匹配字符串"[A-Z]{1}[a-z]{2}\\d{1,}"或正則表達式?)

在這種情況下,您可以做的是嘗試在默認情況下匹配正則表達式。

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

真棒處理這種情況的方法:) –