2013-01-24 36 views
6

क्या इस स्थिति को कम करने का कोई अन्य तरीका है?एक चर के लिए कई स्ट्रिंग इनपुट

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") || 
oper.equals("Addition") || oper.equals("+")) 

मैं सोच रहा था कि अगर मैं इसे 'शॉर्टकट' करने के लिए कुछ कर सकता हूं तो मैं सोच रहा था। जब मेरे सरल कैलकुलेटर प्रोग्राम में किस प्रकार का ऑपरेशन किया जाना है, तो उपयोगकर्ता एक स्ट्रिंग टाइप करेगा। हमारे प्रोफेसर ने कहा कि हमारे कार्यक्रम को स्वीकार करना चाहिए कि क्या उपयोगकर्ता लोअरकेस अक्षरों में "जोड़" या "जोड़ें" दर्ज करता है, या नहीं ... या मुझे ऐसा करने का एकमात्र तरीका है?

+1

शायद एक सूची/सरणी में वैकल्पिक शब्द रख दिया और एक होता है()/पाश है। पूंजी अक्षरों को अनुमति देने के लिए, बस इसे पार्स करने से पहले सभी इनपुट को लोअरकेस (या अपरकेस) में कनवर्ट करें, या नीचे सुझाए गए इग्नोरकेस का उपयोग करें। – keyser

+3

'बराबर()' के बराबर अनदेखा करें() '? –

उत्तर

9

आप 1 चार तार के लिए String#equalsIgnoreCase(String) उपयोग कर सकते हैं: -

if (oper.equalsIgnoreCase("add") || 
    oper.equalsIgnoreCase("addition") || 
    oper.equals("+")) 

तार की संख्या बढ़ जाती है, तो आप एक List के साथ बंद बेहतर होगा, और इसके contains विधि का उपयोग करें। लेकिन सिर्फ इन इनपुट के लिए, आप केवल इस दृष्टिकोण का पालन कर सकते हैं। आप वास्तव में इस के लिए एक regex की जरूरत नहीं है,

if (oper.matches("add|addition|[+]") 

लेकिन -:


इस दृष्टिकोण का एक अन्य तरीका String#matches(String) विधि है, जो एक regex लेता उपयोग करने के लिए है। विशेष रूप से, यह विधि अधिक इनपुट के लिए बदसूरत हो सकती है। लेकिन, यह इस मामले के लिए सिर्फ एक रास्ता है। तो, आप उनमें से किसी एक को चुन सकते हैं। पहली बार जाने के लिए पहला एक और स्पष्ट है।


वैकल्पिक रूप से, आप भी enum का उपयोग operators स्टोर करने के लिए, और यह हर जगह उदाहरण है गुजरती हैं, बल्कि एक string से कर सकते हैं। इसके साथ काम करना अधिक आसान होगा। enum इस प्रकार दिखाई देगा:

public enum Operator { 
    ADD, 
    SUB, 
    MUL, 
    DIV; 
} 

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

+0

+1 मुझे 'दूसरा' दृष्टिकोण पसंद आया। यह समझना मुश्किल नहीं है ('पहले जाने पर पहली बार देखना अधिक स्पष्ट है।') –

+0

@ नंदकुमारटेकले .. हाँ सही। लेकिन, अगर कोई 'रेगेक्स' के साथ सहज नहीं है। –

0

उस फ़ंक्शन के अंदर कोड का पूरा कोड फेंक दें: isOperationAddition(String s){...} जो एक बूलियन देता है।

तो यह:

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") || 
    oper.equals("Addition") || oper.equals("+")){...} 

इस

if (isOperationAddition(operation)){...} 
कि विधि के अंदर

तो किए गए परिवर्तन, अपनी यदि बयानों के लिए शाखा सामग्री के रूप में तार का उपयोग नहीं करते। एक वैरिएबल है जो परिभाषित करता है कि यह किस तरह का ऑपरेशन है और "बर्बर लोगों को (भ्रम/संदिग्ध उपयोगकर्ताओं) को चूसने पर रखें"। याद रखने के लिए आपको हमेशा एक सूची के खिलाफ पुनरावृत्ति नहीं करना चाहिए कि हम किस ऑपरेशन से निपट रहे हैं। aDD अमान्य इनपुट के रूप में माना जाता है

3

हैं, तो आप दृष्टिकोण को अपनाने पर विचार कर सकते हैं:

ArrayList<String> possibleInputs = new ArrayList<String>(); 

possibleInputs.add("Add"); 
possibleInputs.add("add"); 
possibleInputs.add("Addition"); 
possibleInputs.add("addition"); 
possibleInputs.add("+"); 

if(possibleInputs.contains(oper)) 
{ 
    // ... 
} 
+0

तब EqualsIgnoreCase() का उपयोग करना बेहतर नहीं है? – TechSpellBound

+1

'संभावित इनपुट। ** ** जोड़ें()' ??? 'सूची' में ऐसी विधि नहीं है। भगवान, इस पर '2 अपवॉट्स 'है। –

+1

आप अपनी सूची में '' जोड़ें '' और '" जोड़ें "जोड़ने से बचने के लिए 'स्ट्रिंग # toLowerCase()' विधि का उपयोग कर सकते हैं। आप मान सकते हैं कि 'एडीडी' अमान्य नहीं है, क्योंकि यह ओपी में सूचीबद्ध नहीं है। –

4

@ रोहित के जवाब के अलावा, मैं इस जोड़ना चाहते हैं।

तारों की तुलना के मामले में, यदि oper is nullNullPointerException फेंक दिया जा सकता है।अतः इसकी हमेशा बेहतर

oper.equalsIgnoreCase("addition") 
0

के बजाय

"addition".equalsIgnoreCase(oper) 

लिखने के लिए आप इनपुट ले जा सकते हैं, और छोटे अक्षरों के लिए रूपांतरित तो तुलना करें।

str.toLowerCase() 

फिर अपने अगर() बयान को पारित

if(str.equals("add") || str.equals("addition") || str.equals("+"))