Go: स्ट्रिंग में सबस्ट्रिंग की उपस्थिति की जाँच — पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go में कैसे जाँचें कि स्ट्रिंग में सबस्ट्रिंग है या नहीं? शुरुआत से विशेषज्ञ तक

\n\n

क्या आपने कभी Go में कोड लिखते समय एक सरल प्रश्न पर रुक गए हैं: "क्या इस स्ट्रिंग में वह हिस्सा है जो मुझे चाहिए?" यदि हाँ — तो आप अकेले नहीं हैं। Stack Overflow पर इस प्रश्न को हज़ारों बार देखा गया है, और यह उचित भी है। Go में इस समस्या को हल करने के कई सुरुचिपूर्ण तरीके हैं, लेकिन कौन सा चुनें? आइए इसे हमेशा के लिए समझ लें।

\n\n

इस लेख में हम आपको केवल strings.Contains फ़ंक्शन नहीं दिखाएंगे। हम आपको Go डेवलपर की तरह सोचना सिखाएंगे: प्रत्येक स्थिति के लिए सर्वोत्तम उपकरण चुनना, समस्याओं से बचना और ऐसा कोड लिखना जो तेज़ और पूर्वानुमानित रूप से काम करे।

\n\n

सामग्री

\n\n\n

1. strings.Contains — आपका पहला मित्र

\n\n

सबसे सरल और लोकप्रिय तरीके से शुरू करते हैं। Go की मानक लाइब्रेरी का strings.Contains फ़ंक्शन — यह 80% मामलों में आपको चाहिए। यह true लौटाता है यदि स्ट्रिंग में निर्दिष्ट सबस्ट्रिंग है, और अन्यथा false लौटाता है।

\n\n

यह वास्तविक कोड में कैसा दिखता है:

\n\n
package 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\n

केस को अनदेखा करने का उदाहरण

\n\n
str := "Golang is awesome"\nsubstr := "golang"\n\nif strings.Contains(strings.ToLower(str), strings.ToLower(substr)) {\n    fmt.Println("मिल गया (केस को अनदेखा करते हुए)!")\n}\n
\n\n

कब उपयोग करें: जब आपको एक सरल बाइनरी उत्तर चाहिए — "है" या "नहीं"। बिना किसी अतिरिक्त विवरण के।

\n\n

2. strings.Index — जब स्थिति जानना आवश्यक हो

\n\n

कभी-कभी यह जानना पर्याप्त नहीं होता कि सबस्ट्रिंग मौजूद है। आप यह जानना चाहते हैं कि वह कहाँ है। उदाहरण के लिए, आप एक लॉग पार्स कर रहे हैं और एक निश्चित मार्कर के बाद स्ट्रिंग का हिस्सा निकालना चाहते हैं। यहाँ strings.Index काम आता है।

\n\n

यह फ़ंक्शन सबस्ट्रिंग के पहले आने की स्थिति (0 से शुरू) या -1 लौटाता है यदि सबस्ट्रिंग नहीं मिली।

\n\n
str := "Ошибка: файл не найден в /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
\n\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\n

3. ContainsAny और ContainsRune — बारीक नियंत्रण

\n\n

कभी-कभी आपको यह जाँचने की आवश्यकता होती है कि स्ट्रिंग में किसी सेट से कोई भी वर्ण है या नहीं, न कि पूरी सबस्ट्रिंग। यहीं strings.ContainsAny और strings.ContainsRune काम आते हैं।

\n\n
// 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\n

4. प्रदर्शन: क्या चुनें?

\n\n

अब जब आप सभी विकल्पों को जानते हैं, तो आइए प्रदर्शन के बारे में बात करते हैं। बड़ी स्ट्रिंग्स या उच्च-लोड एप्लिकेशन के लिए, सही फ़ंक्शन चुनना महत्वपूर्ण हो सकता है।

\n\n

यहाँ एक त्वरित तुलना है:

\n
    \n
  • strings.Contains — सबसे तेज़ और सबसे अनुकूलित। अधिकांश मामलों के लिए आदर्श।
  • \n
  • strings.Index — Contains के समान गति, लेकिन अतिरिक्त स्थिति जानकारी प्रदान करता है।
  • \n
  • strings.ContainsAny — थोड़ा धीमा क्योंकि यह कई वर्णों की जाँच करता है।
  • \n
  • strings.ContainsRune — एकल वर्ण के लिए तेज़, लेकिन Contains से धीमा।
  • \n
\n\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 का उपयोग करें। यह सबसे तेज़ और सबसे पठनीय है।

\n\n

5. सीमांत मामले और समस्याएँ

\n\n

Go में स्ट्रिंग्स के साथ काम करते समय, कुछ बारीकियाँ हैं जिनके बारे में जागरूक होना चाहिए:

\n\n

खाली सबस्ट्रिंग

\n

Go में, एक खाली सबस्ट्रिंग हमेशा किसी भी स्ट्रिंग में मौजूद मानी जाती है:

\n\n
strings.Contains("hello", "") // true\nstrings.Index("hello", "") // 0\n
\n\n

यह तर्कसंगत है, लेकिन यदि आप इसकी उम्मीद नहीं करते हैं तो यह बग पैदा कर सकता है।

\n\n

Unicode और मल्टीबाइट वर्ण

\n

Go की स्ट्रिंग्स UTF-8 एन्कोडेड हैं। strings.Contains और strings.Index बाइट्स के साथ काम करते हैं, वर्णों के साथ नहीं। यह आमतौर पर कोई समस्या नहीं है, लेकिन यदि आप स्ट्रिंग को वर्णों द्वारा संसाधित कर रहे हैं, तो utf8.RuneCountInString या strings.IndexRune का उपयोग करें।

\n\n
str := "Привет" // 6 वर्ण, 12 बाइट्स\nfmt.Println(len(str)) // 12\nfmt.Println(utf8.RuneCountInString(str)) // 6\n
\n\n

केस-सेंसिटिविटी

\n

जैसा कि पहले उल्लेख किया गया है, सभी मानक फ़ंक्शन केस-सेंसिटिव हैं। केस-असंवेदनशील जाँच के लिए, strings.EqualFold का उपयोग करें:

\n\n
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
\n\n

याद रखें: सही उपकरण चुनना न केवल कोड को तेज़ बनाता है, बल्कि इसे अधिक पठनीय और बनाए रखने में आसान बनाता है। अब जाएँ और आत्मविश्वास के साथ Go में स्ट्रिंग्स खोजें!

\n\n

क्या आपके पास प्रश्न हैं? टिप्पणियों में पूछें! और यदि यह लेख उपयोगी था, तो इसे अपने सहकर्मियों के साथ साझा करें।

ब्लॉग

पुस्तक अनुशंसाएँ