2010-06-10 13 views
44

भीतर मैं बस एक स्ट्रिंग है कुछ इस तरह दिखता है:गणना एक स्ट्रिंग दिखाए जाने की एक स्ट्रिंग

"7, सच है, एनए, झूठी: 67, झूठे, एनए, झूठी: 5, झूठे, एनए, झूठी: 5, झूठी, एनए, झूठी "

मैं बस इतना करना चाहता हूं कि स्ट्रिंग में" सत्य "स्ट्रिंग कितनी बार गिनती है। मुझे लगता है कि उत्तर String.CountAllTheTimesThisStringAppearsInThatString() जैसा कुछ है लेकिन किसी कारण से मैं इसे समझ नहीं सकता। मदद?

+2

http://stackoverflow.com/questions/541954/how-would-you-count-occurences-of-a-string-within -ए-स्ट्रिंग-सी/542136 # 542136 – jball

+6

@jball मुझे लगता है कि एक * चरित्र * – AakashM

+0

@AakashM की घटनाओं की गिनती के लिए सभी समाधान हैं, दूसरे लिंक को देखें। साथ ही, यह उस प्रश्न के उत्तर को और अधिक सही (यानी, स्ट्रिंग आधारित, चार आधारित नहीं) प्रदान करने का एक सही अवसर है। – jball

उत्तर

147
Regex.Matches(input, "true").Count 
+2

अकेले ब्रेवटी के आधार पर - आप जीतते हैं;) – onekidney

+0

सी # स्ट्रिंग में कोई मिलान नहीं है। उफ़। रेगेक्स। – xarzu

+1

क्यों न छोड़ें हम 'इनपुट' से क्यों बच रहे हैं यह नियमित अभिव्यक्ति नहीं है? – tpower

5

यह विफल हो जाएगा हालांकि स्ट्रिंग में "मिस्कंट्रू" जैसे तार हो सकते हैं।

Regex.Matches("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true").Count; 
2

ऐसा करें, कृपया ध्यान दें कि आपको 'परीक्षण' के लिए रेगेक्स को परिभाषित करना होगा !!!

string s = "7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false"; 
string[] parts = (new Regex("")).Split(s); 
//just do a count on parts 
3
LINQ के साथ

...

string s = "7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false"; 
var count = s.Split(new[] {',', ':'}).Count(s => s == "true"); 
13

आपका रेगुलर एक्सप्रेशन \btrue\b 'miscontrue' मुद्दा कैस्पर को लाता है चारों ओर पाने के लिए किया जाना चाहिए। पूर्ण समाधान इस प्रकार दिखाई देगा:

string searchText = "7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false"; 
string regexPattern = @"\btrue\b"; 
int numberOfTrues = Regex.Matches(searchText, regexPattern).Count; 

यकीन System.Text.RegularExpressions नाम स्थान फ़ाइल के शीर्ष पर शामिल किया गया है।

+1

स्ट्रिंग वैरिएबल को रेगेक्स नहीं कहा जाना चाहिए - यह .NET Regex क्लास नाम के साथ टकराता है। – JustAMartin

14

शायद सबसे कुशल नहीं है, लेकिन लगता है कि यह करने के लिए यह एक साफ तरीका है।

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(CountAllTheTimesThisStringAppearsInThatString("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true")); 
     Console.WriteLine(CountAllTheTimesThisStringAppearsInThatString("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "false")); 

    } 

    static Int32 CountAllTheTimesThisStringAppearsInThatString(string orig, string find) 
    { 
     var s2 = orig.Replace(find,""); 
     return (orig.Length - s2.Length)/find.Length; 
    } 
} 
+2

हा हा - मुझे आपके प्रस्तावित विधि नाम का उपयोग करने के लिए बस सही के रूप में चिह्नित करना चाहिए। :) – onekidney

3

यहां, मैं LINQ का उपयोग करके उत्तर को अधिक से अधिक आर्किटेक्ट कर दूंगा। बस पता चलता है कि 'एन' तरीके की तुलना में अधिक एक अंडा पकाने के लिए है कि:

public int countTrue(string data) 
{ 
    string[] splitdata = data.Split(','); 

    var results = from p in splitdata 
      where p.Contains("true") 
      select p; 

    return results.Count(); 
} 
+0

धन्यवाद इसके काम ठीक और स्मार्ट भी :) – Syed

संबंधित मुद्दे