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

ऐसा लगता है कि मेरा रेगेक्स बंद है या मैं इसे केस-कथन में सही तरीके से उपयोग नहीं कर रहा हूं। मैं जो चाहता हूं वह एक स्ट्रिंग है जो: बिल्कुल एक अपरकेस अक्षर के साथ शुरू होता है और इसके बाद दो लोअरकेस अक्षर होते हैं, जिसके बाद कम से कम एक अंक होता है।जावा में स्विच-स्टेटमेंट के लिए रेगेक्स का उपयोग

मैंने रेगेक्स एपीआई की जांच की है और तीन उचित रूपों (लालची, अनिच्छुक और स्वामित्व वाले क्वांटिफायर) को उनके उचित उपयोग के बिना कोशिश की है। स्ट्रिंग के लिए विधियों को भी बिना किसी विधि को ढूंढने के तरीकों की जांच की जो मेरी आवश्यकताओं के अनुरूप था।

+2

क्या यह जावा 7 में कुछ नया है? Regex के साथ स्विच करें। जावा 6 या उससे कम में ऐसी कोई चीज़ नहीं है। – gigadot

+1

6 और नीचे (केवल इंटीग्रल और एनम्स) में कोई स्ट्रिंग स्विच भी नहीं है –

+0

हां - मुझे संदेह है कि यह स्विच के नियम तोड़ रहा था। तो अच्छा करने के लिए 'ओल अगर/और अगर बयान तो? – jollyroger

उत्तर

23

आप स्विच केस के रूप में रेगेक्स का उपयोग नहीं कर सकते हैं। (इसके बारे में सोचो: कैसे जावा पता होगा कि क्या आप स्ट्रिंग "[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; 
    } 

(BTW, यह केवल जावा 7 और बाद में साथ काम करेंगे। उस से पहले तार पर कोई स्विचिंग है।)

+0

मामले को संभालने के लिए बहुत बढ़िया तरीका :) –

4

मुझे नहीं लगता कि आप स्विच मामलों में regex का उपयोग कर सकते हैं।

स्विच अभिव्यक्ति में स्ट्रिंग भाव से की जाती है के रूप में अगर String.equals विधि इस्तेमाल किए जा रहे प्रत्येक मामले लेबल के साथ जुड़े।

अधिक जानकारी के लिए http://download.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html देखें।

+0

स्विच-स्टेटमेंट की मेरी समझ को गहरा बनाने के लिए धन्यवाद। – jollyroger

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^