C# में किसी स्ट्रिंग में किसी कैरेक्टर या सबस्ट्रिंग की उपस्थिति की संख्या कैसे गिनें: 5 तरीके

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

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

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

शब्द "अब्रकदब्र" में अक्षर "अ" कितनी बार आता है? C# में समस्या हल करें

\n\n

कल्पना करें: आप एक लॉग विश्लेषक लिख रहे हैं, CSV फ़ाइल पार्स कर रहे हैं, या बस यह जाँच रहे हैं कि उपयोगकर्ता ने ईमेल में @ कैरेक्टर कितनी बार दर्ज किया है। "किसी स्ट्रिंग में किसी कैरेक्टर या सबस्ट्रिंग की उपस्थिति की संख्या गिनना" उन कार्यों में से एक है जो लगभग हर दूसरे प्रोजेक्ट में आता है। Stack Overflow पर इस प्रश्न ने हजारों व्यूज़ और दर्जनों उत्तर विकल्प एकत्र किए हैं। कोई आश्चर्य नहीं: C# में कम से कम 5 अलग-अलग तरीके हैं, और सही का चयन करने से डिबगिंग के घंटे बच सकते हैं।

\n\n

इस लेख में, हम सभी लोकप्रिय तरीकों पर चर्चा करेंगे - क्लासिक लूप से लेकर आधुनिक Span<T> और LINQ तक। आप जानेंगे कि कौन सा तरीका तेज़ है, कौन सा अधिक पठनीय है, और कौन सा प्रोडक्शन में उपयोग नहीं करना बेहतर है। चलिए शुरू करते हैं!

\n\n

1. क्लासिक foreach लूप - पुराना तरीका

\n\n

सबसे सहज तरीका: स्ट्रिंग लें, प्रत्येक कैरेक्टर पर जाएँ और मिलान गिनें। हमेशा काम करता है, किसी अतिरिक्त लाइब्रेरी की आवश्यकता नहीं है।

\n\n
string text = "अब्रकदब्र";\nchar target = 'अ';\nint count = 0;\n\nforeach (char c in text)\n{\n    if (c == target)\n        count++;\n}\n\nConsole.WriteLine($"कैरेक्टर '{target}' {count} बार आता है।"); // आउटपुट: 4
\n\n

लाभ: पठनीयता, प्रक्रिया पर नियंत्रण, तर्क जोड़ा जा सकता है (जैसे, केस को अनदेखा करना)।
\nनुकसान: सबस्ट्रिंग (लगातार कई कैरेक्टर) गिनने के लिए उपयुक्त नहीं - इसके लिए नेस्टेड लूप लिखना होगा।

\n\n

2. LINQ से Count() विधि - कैरेक्टर के लिए एक-लाइनर

\n\n

यदि आप संक्षिप्त कोड पसंद करते हैं और LINQ का उपयोग करते हैं, तो यह विकल्प आपके लिए है। Count() विधि एक प्रेडिकेट लेती है और शर्त को पूरा करने वाले तत्वों की संख्या लौटाती है।

\n\n
using System.Linq;\n\nstring text = "Hello, World!";\nchar target = 'l';\n\nint count = text.Count(c => c == target);\nConsole.WriteLine(count); // आउटपुट: 3
\n\n

ध्यान दें: Count() System.Linq नेमस्पेस से एक एक्सटेंशन विधि है। यदि आपने using System.Linq शामिल नहीं किया है, तो कोड कंपाइल नहीं होगा।

\n\n

सबस्ट्रिंग गिनने के लिए यह विधि सीधे उपयुक्त नहीं है। पहले स्ट्रिंग को विभाजित करना होगा या रेगुलर एक्सप्रेशन का उपयोग करना होगा (बिंदु 5 देखें)।

\n\n

3. Span<T> और MemoryExtensions - अधिकतम प्रदर्शन

\n\n

यदि आप बड़ी स्ट्रिंग्स (मेगाबाइट लॉग) के साथ काम कर रहे हैं और हर मिलीसेकंड मायने रखता है, तो LINQ को भूल जाइए। Span<char> और MemoryExtensions से Count() विधि का उपयोग करें (.NET 5+ से उपलब्ध)।

\n\n
using System;\n\nstring text = "अब्रकदब्र";\nReadOnlySpan<char> span = text.AsSpan();\nint count = span.Count('अ');\n\nConsole.WriteLine(count); // आउटपुट: 4
\n\n

यह तेज़ क्यों है? Span<T> नई ऑब्जेक्ट आवंटित किए बिना मेमोरी के सन्निहित ब्लॉक के साथ काम करता है। MemoryExtensions में Count() विधि SIMD निर्देशों के लिए अनुकूलित है - यह प्रोसेसर के एक चक्र में 16-32 कैरेक्टर प्रोसेस करती है।

\n\n

सबस्ट्रिंग के लिए भी समाधान है:

\n\n
int count = span.Count("र"); // सबस्ट्रिंग "र" की उपस्थिति गिनता है\nConsole.WriteLine(count); // आउटपुट: 2 ("अब्रकदब्र" में "र" दो बार आता है)
\n\n

महत्वपूर्ण: यह विधि केस-सेंसिटिव है। यदि केस को अनदेखा करना है, तो पहले स्ट्रिंग को एक केस में बदलें या span.Count("र", StringComparison.OrdinalIgnoreCase) का उपयोग करें।

\n\n

4. Split विधि - सबस्ट्रिंग के लिए चालाक तरीका

\n\n

पुराना लेकिन काम करने वाला तरीका: स्ट्रिंग को वांछित सबस्ट्रिंग द्वारा विभाजित करें और भागों की संख्या में से एक घटाएँ।

\n\n
string text = "एक, दो, तीन, एक, चार";\nstring target = "एक";\n\nint count = text.Split(target, StringSplitOptions.None).Length - 1;\nConsole.WriteLine(count); // आउटपुट: 2
\n\n

यह कैसे काम करता है: Split

ब्लॉग

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