给定一个String数组,如:
string[]={"bmw"," ","1bmw"," "};
我需要计算子串bmw
在该数组中出现的频率。在这个例子中,它发生了2次。
如何在C#中编写?
我也想忽略大写字符
sting [] = {“bmw”,“”,“BMw”,“1bmw”}
然后计数结果是3。
我该怎么办?
#感谢大家的回答。
答案 0 :(得分:15)
尝试:
var str = new string[] { "bmw", " ", "1bmw", " " };
var count = str.Count(s => s.Contains("bmw"));
下一个代码将返回不区分大小写的事件的数量(如评论中提到的作者):
var count = str.Count(s =>
s.IndexOf("bmw", StringComparison.OrdinalIgnoreCase) > -1
);
可以找到有关字符串比较的更多信息here。
答案 1 :(得分:5)
没有LINQ
int counter = 0;
foreach(string item in string_array)
{
if(item.IndexOf("bmw") > -1){
counter++;
}
}
答案 2 :(得分:3)
您可以像这样使用Linq:
var s = new string[] {"bmw", "1bmw"};
var result = s.Where(o=>o.Contains("bmw")).Count();
答案 3 :(得分:1)
如果您使用的是C#3,则可以使用LINQ:
var strings = {"bmw"," ","1bmw"," "};
var count = string.Where( s => s.IndexOf( "bmw" ) > -1 ).Count();
否则循环也会起作用:
string[] strings = {"bmw"," ","1bmw"," "};
int count = 0;
foreach( string s in strings ) {
if( s.IndexOf( "bmw" > -1 ) ) {
count++;
}
}
答案 4 :(得分:1)
使用LINQ的一种方法
static int CountOfString(IEnumerable<string> items, string substring, bool isCaseSensitive)
{
StringComparison comparison = StringComparison.InvariantCulture;
if (!isCaseSensitive)
comparison = StringComparison.InvariantCultureIgnoreCase;
return items.Count(item => item.IndexOf(substring, comparison) > -1);
}
使用它
string[] items = { "bmw", " ", "1bmw", " " };
int count = CountOfString(items, "bmw", false);
答案 5 :(得分:1)
不区分大小写使它更加冗长,但使用以下内容仍然非常紧凑:
var str = new sting[]={"bmw", "", "BMw","1bmw"};
var count = str.Count(s => s.IndexOf("bmw", StringComparison.InvariantCultureIgnoreCase) > -1);