"मदद करें, मैं स्ट्रिंग को विभाजित नहीं कर सकता!" — एक समस्या की कहानी
\n\nकल्पना करें: आप Java में लॉग पार्सर लिख रहे हैं, CSV फ़ाइल प्रोसेस कर रहे हैं, या बस उपयोगकर्ता इनपुट को शब्दों में तोड़ना चाहते हैं। और फिर — रुकिए। यह कैसे करें? यदि आपने कभी "How do I split a string in Java" गूगल किया है, तो आप जानते हैं: इस प्रश्न ने Stack Overflow पर सैकड़ों हज़ारों व्यूज़ जुटाए हैं। इसलिए नहीं कि Java प्रोग्रामर आलसी हैं, बल्कि इसलिए कि split() एक शक्तिशाली चीज़ है, लेकिन इसमें छिपी समस्याएँ हैं।
\n\nइस लेख में हम Java में स्ट्रिंग विभाजन को A से Z तक समझेंगे। आप जानेंगे कि split() विधि कैसे काम करती है, रेगुलर एक्सप्रेशन क्या आश्चर्य लाते हैं, और उन गलतियों से कैसे बचें जो हर दूसरे शुरुआती का इंतज़ार करती हैं। चलिए शुरू करते हैं!
split() विधि: आपका मुख्य उपकरण
\n\nJava में String वर्ग split() विधि के दो ओवरलोडेड विकल्प प्रदान करता है:
public String[] split(String regex)\npublic String[] split(String regex, int limit)\n\nपहला विकल्प एक रेगुलर एक्सप्रेशन लेता है और स्ट्रिंग्स की एक सरणी लौटाता है। दूसरा वही करता है, लेकिन भागों की संख्या पर एक सीमा के साथ। सरल लगता है? आइए उदाहरण देखें।
\n\nमूल उदाहरण: स्पेस द्वारा विभाजन
\n\npublic class SplitExample {\n public static void main(String[] args) {\n String text = "Java स्ट्रिंग्स को आसानी से विभाजित करता है";\n String[] words = text.split(" ");\n \n for (String word : words) {\n System.out.println(word);\n }\n }\n}\n\nआउटपुट:
\nJava\nस्ट्रिंग्स\nको\nआसानी\nसे\nविभाजित\nकरता\nहै\n\nकाम करता है? काम करता है। लेकिन क्या होगा यदि आपके पास लगातार कई स्पेस हों? तब सरणी में खाली स्ट्रिंग्स आ जाएँगी। अप्रिय, है ना?
\n\nJava में कॉमा द्वारा स्ट्रिंग विभाजन (CSV)
\n\nसबसे आम कार्यों में से एक है Java में कॉमा द्वारा स्ट्रिंग विभाजन। मान लीजिए, आपके पास एक CSV स्ट्रिंग है:
\n\nString csv = "सेब,नाशपाती,केला,संतरा";\nString[] fruits = csv.split(",");\n\nfor (String fruit : fruits) {\n System.out.println(fruit.trim()); // trim() अतिरिक्त स्पेस हटाता है\n}\n\nआउटपुट:
\nसेब\nनाशपाती\nकेला\nसंतरा\n\nध्यान दें: हमने trim() जोड़ा, क्योंकि वास्तविक डेटा में कॉमा के बाद अक्सर स्पेस होते हैं। इसके बिना आपको लीडिंग स्पेस के साथ " सेब" मिलेगा — और फिर आप सोचेंगे कि स्ट्रिंग्स क्यों मेल नहीं खातीं।
रेगुलर एक्सप्रेशन: जादू और दर्द
\n\nsplit() विधि एक रेगुलर एक्सप्रेशन लेती है। यह बहुत लचीलापन देता है, लेकिन सावधानी की आवश्यकता है। आइए लोकप्रिय परिदृश्यों पर विचार करें।
डॉट द्वारा विभाजन
\n\nIP पता "192.168.1.1" को तोड़ना चाहते हैं? भोला कोड str.split(".") काम नहीं करेगा। क्यों? क्योंकि रेगुलर एक्सप्रेशन में डॉट एक विशेष वर्ण है, जिसका अर्थ है "कोई भी वर्ण"। परिणामस्वरूप, आपको खाली स्ट्रिंग्स की एक सरणी मिलेगी।
सही समाधान — डॉट को एस्केप करना:
\n\nString ip = "192.168.1.1";\nString[] parts = ip.split("\\\\."); // डबल बैकस्लैश!\n\nfor (String part : parts) {\n System.out.println(part);\n}\n// आउटपुट: 192 168 1 1\n\nयाद रखें: Java में रेगुलर एक्सप्रेशन में एस्केप करने के लिए डबल बैकस्लैश \\\\ का उपयोग किया जाता है। एकल \\ स्ट्रिंग के लिए एक नियंत्रण वर्ण है, और डबल पहले से ही regex के लिए है।
एकाधिक विभाजकों द्वारा विभाजन
\n\nक्या करें यदि स्ट्रिंग में कॉमा, सेमीकोलन और स्पेस हों? वर्गाकार कोष्ठकों में वर्ण वर्ग का उपयोग करें:
\n\nString messy = "सेब;नाशपाती,केला संतरा";\nString[] items = messy.split("[;,\\\\s]+"); // ; या , या स्पेस वर्ण\n\nfor (String item : items) {\n System.out.println(item);\n}\n// आउटपुट: सेब नाशपाती केला संतरा\n\nचिह्न + का अर्थ है "एक या अधिक" — यह सुनिश्चित करता है कि विभाजकों का क्रम खाली स्ट्रिंग्स नहीं बनाता।