关于c#:根据字数过滤字符串

Filtering a String based on word count

我试图根据每个字符串中的单词数筛选字符串列表。我假设您将修剪字符串末尾的任何空白,然后计算字符串中剩余的空格数,这样wordcount=number of space+1。这是最有效的方法吗?我知道,对于基于字符计数的过滤,下面的工作是很好的……只是不知道如何使用c/linq简洁地编写它。

1
2
3
4
5
6
7
8
9
if (checkBox_MinMaxChars.Checked)
{
    int minChar = int.Parse(numeric_MinChars.Text);
    int maxChar = int.Parse(numeric_MaxChars.Text);

    myList = myList.Where(x =>
                              x.Length >= minChar &&
                              x.Length <= maxChar).ToList();
}

有点字的想法吗?

最新消息:这很有魅力……谢谢马修:

1
2
3
4
5
int minWords = int.Parse(numeric_MinWords.Text);
int maxWords = int.Parse(numeric_MaxWords.Text);

sortBox1 = sortBox1.Where(x => x.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count() >= minWords &&
                               x.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count() <= maxWords).ToList();


我将以更简单的方式处理它,因为您已经指出空间可以可靠地用作分隔符,如下所示:

1
2
var str ="     the string to split and count       ";
var wordCount = str.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count();

编辑:

如果需要最佳性能,并且内存使用是一个问题,那么您可以编写自己的方法并利用IndexOf()(尽管有许多方法可以实现这样的问题,但我更喜欢重用而不是从头开始的代码设计):

1
2
3
4
5
6
7
8
9
10
11
    public int WordCount(string s) {
        const int DONE = -1;
        var wordCount = 0;
        var index = 0;
        var str = s.Trim();
        while (index != DONE) {
            wordCount++;
            index = str.IndexOf("", index + 1);
        }
        return wordCount;
    }


你计算单词的方法是可以的。对于更多的内存使用,String.Split将给出类似的结果。

而不仅仅是实现您的int WordCount(string text)功能并将其传递到:

1
myList.Where(s => WordCount(s) > minWordCount)


您要在给定范围内使用字数计数的所有字符串吗?

1
2
3
4
5
6
7
int minCount = 10;
int maxCount = 15;
IEnumerable<string> result = list
    .Select(String => new { String, Words = String.Split() })
    .Where(x => x.Words.Length >= minCount
             && x.Words.Length <= maxCount)
    .Select(x => x.String);

如何使用空格将字符串拆分为数组并对其进行计数?

1
s.Split().Count()

已删除空间:)