परिचय: क्यों enum और स्ट्रिंग स्थायी साथी हैं?
\n\nकल्पना करें: आप एक प्रोग्राम लिख रहे हैं जो उपयोगकर्ता से कमांड लेता है। उपयोगकर्ता "RED" दर्ज करता है, और आपके प्रोग्राम को समझना होगा कि यह रंग Color.RED है। या आप डेटाबेस से डेटा पढ़ रहे हैं, जहाँ स्थिति टेक्स्ट "ACTIVE" के रूप में संग्रहीत है, और कोड में आपके पास enum Status.ACTIVE है। स्ट्रिंग और enum को कैसे जोड़ें? यह शुरुआती Java डेवलपर्स के बीच Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है - और आज हम इसे हमेशा के लिए समझ लेंगे।
इस लेख में आप जानेंगे:
\n- \n
valueOf()का उपयोग करके Java में स्ट्रिंग से enum कैसे प्राप्त करें \n - उस स्थिति को कैसे संभालें जब स्ट्रिंग enum में न हो (ताकि प्रोग्राम क्रैश न हो) \n
- लचीले रूपांतरण के लिए अपनी स्वयं की विधि कैसे लिखें \n
- केस और रिक्त स्थान के साथ कैसे काम करें \n
चलिए शुरू करते हैं!
\n\n1. enum क्या है और इसे स्ट्रिंग में क्यों बदलें?
\n\nEnum (enumeration - गणना का संक्षिप्त रूप) Java में एक विशेष डेटा प्रकार है जिसमें स्थिरांकों का एक निश्चित सेट होता है। उदाहरण के लिए, सप्ताह के दिन, रंग, ऑर्डर की स्थिति।
\n\npublic enum Color {\n RED, GREEN, BLUE, YELLOW\n}\n\nenum के साथ काम करना सुविधाजनक है: कोड पढ़ने योग्य हो जाता है, और कंपाइलर जाँचता है कि आप कोई अस्तित्वहीन मान का उपयोग नहीं कर रहे हैं। लेकिन अक्सर डेटा बाहरी दुनिया से आता है - फ़ाइल, डेटाबेस या उपयोगकर्ता इनपुट से - स्ट्रिंग के रूप में। और यहाँ सवाल उठता है: Java में स्ट्रिंग से enum कैसे प्राप्त करें?
\n\n2. मूल विधि: valueOf() विधि
\n\nसबसे सरल और अंतर्निहित तरीका स्थैतिक विधि valueOf() का उपयोग करना है, जो प्रत्येक enum में होती है। यह एक स्ट्रिंग लेती है और संबंधित enum स्थिरांक लौटाती है। महत्वपूर्ण: स्ट्रिंग का स्थिरांक के नाम से बिल्कुल मेल खाना चाहिए, केस सहित।
public class Main {\n public static void main(String[] args) {\n String input = "RED";\n Color color = Color.valueOf(input);\n System.out.println("रंग: " + color); // आउटपुट: रंग: RED\n }\n}\n\nenum Color {\n RED, GREEN, BLUE\n}\n\nकाम करता है? हाँ। लेकिन एक समस्या है। यदि आप स्ट्रिंग "red" (छोटे अक्षरों में) या "PURPLE" (जो enum में नहीं है) पास करते हैं, तो Java IllegalArgumentException अपवाद फेंक देगा। और इसका मतलब है - प्रोग्राम क्रैश हो जाएगा। अच्छा नहीं है।
3. त्रुटियों से कैसे बचें: अपवाद प्रबंधन
\n\nप्रोग्राम को क्रैश होने से बचाने के लिए, अपवाद को पकड़ना होगा। यह विशेष रूप से महत्वपूर्ण है जब आप उपयोगकर्ता द्वारा दर्ज स्ट्रिंग से enum प्राप्त कर रहे हैं।
\n\npublic static Color getColorFromString(String input) {\n try {\n return Color.valueOf(input.toUpperCase());\n } catch (IllegalArgumentException e) {\n System.out.println("त्रुटि: रंग '" + input + "' मौजूद नहीं है!");\n return null; // या डिफ़ॉल्ट मान\n }\n}\n\npublic static void main(String[] args) {\n String userInput = "blue";\n Color color = getColorFromString(userInput);\n if (color != null) {\n System.out.println("आपने चुना: " + color);\n }\n}\n\nध्यान दें: हमने input.toUpperCase() का उपयोग किया है - यह किसी भी केस में स्ट्रिंग स्वीकार करने की अनुमति देता है। Java में enum नाम बड़े अक्षरों में लिखे जाते हैं, इसलिए यह तरकीब लगभग हमेशा काम करती है।
4. उन्नत विधि: Map के साथ स्वयं की विधि
\n\nकभी-कभी enum में स्थिरांक के नाम बाहर से आने वाले नामों से मेल नहीं खाते। उदाहरण के लिए, आपके पास हिंदी नामों या रिक्त स्थान वाला enum है। ऐसे मामलों में, आपको अपना स्वयं का मैपिंग (mapping) बनाना होगा।
\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic enum Status {\n ACTIVE("सक्रिय"),\n INACTIVE("निष्क्रिय"),\n PENDING("लंबित");\n\n private final String displayName;\n\n Status(String displayName) {\n this.displayName = displayName;\n }\n