2010-06-10 52 views
44

Tôi chỉ có một chuỗi trông giống như sau:Đếm số lần một chuỗi xuất hiện trong một chuỗi

"7, true, NA, false: 67, false, NA, false: 5, false, NA, false: 5, false, NA, false "

Tất cả những gì tôi muốn làm là đếm số lần chuỗi" true "xuất hiện trong chuỗi đó. Tôi cảm thấy như câu trả lời là một cái gì đó giống như String.CountAllTheTimesThisStringAppearsInThatString() nhưng đối với một số lý do tôi chỉ không thể tìm ra nó. Cứu giúp?

+2

http://stackoverflow.com/questions/541954/how-would-you-count-occurences-of-a-string-within -a-string-c/542136 # 542136 – jball

+6

@jball Tôi nghĩ rằng tất cả các giải pháp có để đếm số lần xuất hiện của ký tự * – AakashM

+0

@AakashM, hãy xem liên kết thứ hai. Ngoài ra, đây là cơ hội hoàn hảo để cung cấp câu trả lời chính xác hơn (tức là dựa trên chuỗi, không dựa trên cơ sở) cho câu hỏi đó. – jball

Trả lời

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

Chỉ dựa trên tính ngắn gọn - bạn giành chiến thắng;) – onekidney

+0

không có kết quả phù hợp trong chuỗi C#. oops. Regex. Nevermind – xarzu

+1

Tại sao chúng ta thoát 'đầu vào' nó không phải là một biểu thức chính quy? – tpower

5

Điều này sẽ thất bại mặc dù chuỗi có thể chứa các chuỗi như "miscontrue".

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

làm điều này, xin lưu ý rằng bạn sẽ phải xác định regex cho 'test' !!!

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

Với 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

biểu hiện thường xuyên của bạn nên được \btrue\b để có được xung quanh vấn đề 'miscontrue' Casper sẽ trả về. Giải pháp đầy đủ sẽ trông như sau:

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; 

Đảm bảo không gian tên System.Text.RegularExpressions được bao gồm ở đầu tệp.

+1

Biến chuỗi không nên được gọi là Regex - nó va chạm với tên lớp .NET Regex. – JustAMartin

14

Có lẽ không phải là hiệu quả nhất, nhưng nghĩ rằng đó là một cách gọn gàng để làm điều đó.

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

ha ha - Tôi nên đánh dấu của bạn là chính xác chỉ để sử dụng tên phương pháp được đề xuất của tôi. :) – onekidney

3

Ở đây, tôi sẽ over-architect câu trả lời bằng LINQ. Chỉ cho thấy rằng có nhiều cách 'n' để nấu trứng:

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

Cảm ơn công việc của nó tốt và thông minh quá :) – Syed

Các vấn đề liên quan