次のような文字列があります。
「7、true、NA、false:67、false、NA、false:5、false、NA、false:5、false、NA、false」
私がやりたいのは、文字列「true」が文字列に何回現れるかを数えることです。私は答えがString.CountAllTheTimesThisStringAppearsInThatString()
のようなものだと感じていますが、何らかの理由でそれを理解できません。助けて?
Regex.Matches(input, "true").Count
おそらく最も効率的ではありませんが、それを行うにはきちんとした方法だと思います。
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;
}
}
正規表現は\btrue\b
キャスパーが提起する「誤解」問題を回避するため。完全なソリューションは次のようになります。
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名前空間がファイルの先頭に含まれていることを確認してください。
ただし、文字列に「miscontrue」などの文字列を含めることができる場合、これは失敗します。
Regex.Matches("7,true,NA,false:67,false,NA,false:5,false,NA,false:5,false,NA,false", "true").Count;
ここでは、LINQを使用して答えを過剰に設計します。卵を調理する「n」以上の方法があることを示しています。
public int countTrue(string data)
{
string[] splitdata = data.Split(',');
var results = from p in splitdata
where p.Contains("true")
select p;
return results.Count();
}
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" );
これを行うには、「テスト」の正規表現を定義する必要があることに注意してください!!!
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