计算string []中的子字符串出现次数

时间:2010-04-21 12:53:12

标签: c#

给定一个String数组,如:

string[]={"bmw"," ","1bmw"," "};

我需要计算子串bmw在该数组中出现的频率。在这个例子中,它发生了2次。

如何在C#中编写?

我也想忽略大写字符

sting [] = {“bmw”,“”,“BMw”,“1bmw”}

然后计数结果是3。

我该怎么办?

感谢大家的回答。

6 个答案:

答案 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);