根据单词计数过滤字符串



我试图根据每个字符串中的单词数量过滤字符串列表。我假设您会在字符串的末端修剪任何白色空间,然后计算字符串中剩余的空格数,以便WordCount = numberSpaces 1。这是做到这一点的最有效方法吗?我知道,要根据字符计数进行过滤以下工作正常...只是无法弄清楚如何使用C#/linq简洁地编写它。

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();
}

有任何计数单词的想法?

更新:这就像魅力一样...谢谢Mathew:

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();

我会以一种更简化的方式对其进行处理,因为您指出一个空间可以可靠地用作类似的定界符:

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

编辑:

如果必要最佳的表现,并且内存使用量是一个问题,您可以编写自己的方法并利用IndexOf()(尽管在这样的问题上有许多实施途径,我只是喜欢重复使用而不是从施加代码设计):

    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)功能,然后将其传递到其中:

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

您想要给定范围内的所有字符串?

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

如何使用空间将字符串拆分为数组并计算它?

s.Split().Count()

删除了空间:)

相关内容

  • 没有找到相关文章

最新更新