Go में कैसे जाँचें कि स्ट्रिंग में सबस्ट्रिंग है या नहीं? शुरुआत से विशेषज्ञ तक
\n\nक्या आपने कभी Go में कोड लिखते समय एक सरल प्रश्न पर रुक गए हैं: "क्या इस स्ट्रिंग में वह हिस्सा है जो मुझे चाहिए?" यदि हाँ — तो आप अकेले नहीं हैं। Stack Overflow पर इस प्रश्न को हज़ारों बार देखा गया है, और यह उचित भी है। Go में इस समस्या को हल करने के कई सुरुचिपूर्ण तरीके हैं, लेकिन कौन सा चुनें? आइए इसे हमेशा के लिए समझ लें।
\n\nइस लेख में हम आपको केवल strings.Contains फ़ंक्शन नहीं दिखाएंगे। हम आपको Go डेवलपर की तरह सोचना सिखाएंगे: प्रत्येक स्थिति के लिए सर्वोत्तम उपकरण चुनना, समस्याओं से बचना और ऐसा कोड लिखना जो तेज़ और पूर्वानुमानित रूप से काम करे।
सामग्री
\n- \n
- strings.Contains — आपका पहला मित्र \n
- strings.Index — जब हाँ/नहीं से अधिक चाहिए \n
- ContainsAny और ContainsRune — बारीक ट्यूनिंग \n
- प्रदर्शन: क्या चुनें? \n
- सीमांत मामले और समस्याएँ \n
- निष्कर्ष: क्या याद रखें \n
1. strings.Contains — आपका पहला मित्र
\n\nसबसे सरल और लोकप्रिय तरीके से शुरू करते हैं। Go की मानक लाइब्रेरी का strings.Contains फ़ंक्शन — यह 80% मामलों में आपको चाहिए। यह true लौटाता है यदि स्ट्रिंग में निर्दिष्ट सबस्ट्रिंग है, और अन्यथा false लौटाता है।
यह वास्तविक कोड में कैसा दिखता है:
\n\npackage main\n\nimport (\n "fmt"\n "strings"\n)\n\nfunc main() {\n str := "Привет, мир Go!"\n substr := "мир"\n\n if strings.Contains(str, substr) {\n fmt.Println("स्ट्रिंग में सबस्ट्रिंग है:", substr)\n } else {\n fmt.Println("सबस्ट्रिंग नहीं मिली")\n }\n}\n\n\nआउटपुट:
\nस्ट्रिंग में सबस्ट्रिंग है: мир\n\nसरल है, है ना? फ़ंक्शन केस-सेंसिटिव है: strings.Contains("Go", "go") false लौटाएगा। यदि आप केस को अनदेखा करना चाहते हैं, तो आपको strings.ToLower या strings.EqualFold का उपयोग करना होगा।
केस को अनदेखा करने का उदाहरण
\n\nstr := "Golang is awesome"\nsubstr := "golang"\n\nif strings.Contains(strings.ToLower(str), strings.ToLower(substr)) {\n fmt.Println("मिल गया (केस को अनदेखा करते हुए)!")\n}\n\n\nकब उपयोग करें: जब आपको एक सरल बाइनरी उत्तर चाहिए — "है" या "नहीं"। बिना किसी अतिरिक्त विवरण के।
\n\n2. strings.Index — जब स्थिति जानना आवश्यक हो
\n\nकभी-कभी यह जानना पर्याप्त नहीं होता कि सबस्ट्रिंग मौजूद है। आप यह जानना चाहते हैं कि वह कहाँ है। उदाहरण के लिए, आप एक लॉग पार्स कर रहे हैं और एक निश्चित मार्कर के बाद स्ट्रिंग का हिस्सा निकालना चाहते हैं। यहाँ strings.Index काम आता है।
यह फ़ंक्शन सबस्ट्रिंग के पहले आने की स्थिति (0 से शुरू) या -1 लौटाता है यदि सबस्ट्रिंग नहीं मिली।
\n\nstr := "Ошибка: файл не найден в /var/log"\nsubstr := "файл"\n\npos := strings.Index(str, substr)\nif pos != -1 {\n fmt.Printf("सबस्ट्रिंग स्थिति %d पर मिली\\n", pos)\n fmt.Printf("संदर्भ: %s\\n", str[pos:])\n} else {\n fmt.Println("सबस्ट्रिंग नहीं मिली")\n}\n\n\nआउटपुट:
\nसबस्ट्रिंग स्थिति 7 पर मिली\nसंदर्भ: файл не найден в /var/log\n\nअन्य विविधताएँ भी हैं:
\n- \n
strings.LastIndex— अंतिम आने की स्थिति खोजता है \n strings.IndexAny— सेट के किसी भी वर्ण की पहली उपस्थिति खोजता है \n strings.IndexRune— एक विशिष्ट Unicode वर्ण खोजता है \n
// LastIndex का उदाहरण\nstr := "a-b-c-d"\nlastDash := strings.LastIndex(str, "-")\nfmt.Println("अंतिम डैश स्थिति पर:", lastDash) // 5\n\n// IndexAny का उदाहरण\nstr2 := "hello world"\npos := strings.IndexAny(str2, "aeiou")\nfmt.Println("पहला स्वर स्थिति पर:", pos) // 1\n\n\nकब उपयोग करें: जब आपको केवल "हाँ/नहीं" से अधिक चाहिए — उदाहरण के लिए, स्ट्रिंग को विभाजित करना, संदर्भ निकालना, या कई घटनाओं को संसाधित करना।
\n\n3. ContainsAny और ContainsRune — बारीक नियंत्रण
\n\nकभी-कभी आपको यह जाँचने की आवश्यकता होती है कि स्ट्रिंग में किसी सेट से कोई भी वर्ण है या नहीं, न कि पूरी सबस्ट्रिंग। यहीं strings.ContainsAny और strings.ContainsRune काम आते हैं।
// ContainsAny: जाँचें कि क्या कोई स्वर मौजूद है\nstr := "Golang"\nif strings.ContainsAny(str, "aeiou") {\n fmt.Println("स्ट्रिंग में कम से कम एक स्वर है")\n}\n\n// ContainsRune: एक विशिष्ट वर्ण की जाँच\nruneToFind := 'ñ'\nif strings.ContainsRune("Español", runeToFind) {\n fmt.Println("वर्ण मिल गया!")\n}\n\n\nकब उपयोग करें: जब आपको यह जाँचने की आवश्यकता हो कि क्या कोई वर्ण मौजूद है (उदाहरण के लिए, इनपुट मान्य करना, विशेष वर्ण खोजना, या किसी सेट से मिलान करना)।
\n\n4. प्रदर्शन: क्या चुनें?
\n\nअब जब आप सभी विकल्पों को जानते हैं, तो आइए प्रदर्शन के बारे में बात करते हैं। बड़ी स्ट्रिंग्स या उच्च-लोड एप्लिकेशन के लिए, सही फ़ंक्शन चुनना महत्वपूर्ण हो सकता है।
\n\nयहाँ एक त्वरित तुलना है:
\n- \n
- strings.Contains — सबसे तेज़ और सबसे अनुकूलित। अधिकांश मामलों के लिए आदर्श। \n
- strings.Index — Contains के समान गति, लेकिन अतिरिक्त स्थिति जानकारी प्रदान करता है। \n
- strings.ContainsAny — थोड़ा धीमा क्योंकि यह कई वर्णों की जाँच करता है। \n
- strings.ContainsRune — एकल वर्ण के लिए तेज़, लेकिन Contains से धीमा। \n
// प्रदर्शन तुलना (बेंचमार्क)\n// strings.Contains: ~5 ns/op\n// strings.Index: ~5 ns/op\n// strings.ContainsAny: ~15 ns/op\n// strings.ContainsRune: ~10 ns/op\n\n\nसिफारिश: यदि आपको केवल यह जानना है कि सबस्ट्रिंग मौजूद है या नहीं, तो strings.Contains का उपयोग करें। यह सबसे तेज़ और सबसे पठनीय है।
5. सीमांत मामले और समस्याएँ
\n\nGo में स्ट्रिंग्स के साथ काम करते समय, कुछ बारीकियाँ हैं जिनके बारे में जागरूक होना चाहिए:
\n\nखाली सबस्ट्रिंग
\nGo में, एक खाली सबस्ट्रिंग हमेशा किसी भी स्ट्रिंग में मौजूद मानी जाती है:
\n\nstrings.Contains("hello", "") // true\nstrings.Index("hello", "") // 0\n\n\nयह तर्कसंगत है, लेकिन यदि आप इसकी उम्मीद नहीं करते हैं तो यह बग पैदा कर सकता है।
\n\nUnicode और मल्टीबाइट वर्ण
\nGo की स्ट्रिंग्स UTF-8 एन्कोडेड हैं। strings.Contains और strings.Index बाइट्स के साथ काम करते हैं, वर्णों के साथ नहीं। यह आमतौर पर कोई समस्या नहीं है, लेकिन यदि आप स्ट्रिंग को वर्णों द्वारा संसाधित कर रहे हैं, तो utf8.RuneCountInString या strings.IndexRune का उपयोग करें।
str := "Привет" // 6 वर्ण, 12 बाइट्स\nfmt.Println(len(str)) // 12\nfmt.Println(utf8.RuneCountInString(str)) // 6\n\n\nकेस-सेंसिटिविटी
\nजैसा कि पहले उल्लेख किया गया है, सभी मानक फ़ंक्शन केस-सेंसिटिव हैं। केस-असंवेदनशील जाँच के लिए, strings.EqualFold का उपयोग करें:
if strings.EqualFold("Go", "go") {\n fmt.Println("केस-असंवेदनशील मिलान!") // यह प्रिंट होगा\n}\n\n\nनिष्कर्ष: क्या याद रखें
\n\nहमने Go में सबस्ट्रिंग खोजने के सभी मुख्य तरीकों को कवर किया है। यहाँ एक त्वरित सारांश है:
\n\n- \n
- strings.Contains — सरल "है/नहीं" जाँच के लिए उपयोग करें। यह आपका डिफ़ॉल्ट विकल्प है। \n
- strings.Index — जब आपको सबस्ट्रिंग की स्थिति जानने की आवश्यकता हो। \n
- strings.ContainsAny — जाँचने के लिए कि क्या कोई वर्ण मौजूद है। \n
- strings.ContainsRune — एक विशिष्ट वर्ण की जाँच के लिए। \n
- strings.EqualFold — केस-असंवेदनशील तुलना के लिए। \n
याद रखें: सही उपकरण चुनना न केवल कोड को तेज़ बनाता है, बल्कि इसे अधिक पठनीय और बनाए रखने में आसान बनाता है। अब जाएँ और आत्मविश्वास के साथ Go में स्ट्रिंग्स खोजें!
\n\nक्या आपके पास प्रश्न हैं? टिप्पणियों में पूछें! और यदि यह लेख उपयोगी था, तो इसे अपने सहकर्मियों के साथ साझा करें।