如何在文本中正确计算单词

时间:2014-11-24 20:43:29

标签: c# visual-studio-2010

我想给我的程序一个文本并正确计算单词 我试图使用数组来保存单词:

string[] words = richTextBox1.Text.Split(' ');

但是这段代码有问题,它会计算文本中的空格 所以我尝试了以下代码:

 string[] checkwords= richTextBox1.Text.Split(' ');
        for (int i = 0; i < checkwords.Length; i++)
        {
            if (richTextBox1.Text.EndsWith(" ") )
            {
                return;
            }

            else
            {
                string[] words = richTextBox1.Text.Split(' ');

                toolStripStatusLabel1.Text = "Words" + " = " + words.Length.ToString();

但现在它无法正常工作。

3 个答案:

答案 0 :(得分:2)

我建议您使用'word boundary'

Regex使用\b

否则,您的代码可能无法正确考虑标签和新行等内容 - var words = Regex .Split("hello world", @"\b") .Where(s => !string.IsNullOrWhiteSpace(s)); var wordCount = words.Count(); 将为您处理

{{1}}

答案 1 :(得分:1)

您可以使用String.SplitStringSplitOptions.RemoveEmptyEntries的重载来忽略多个连续的空格。

string text = "a    b c    d";  // 4 "words"
int words = text.Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries).Length;  

我使用空char[](您也可以使用new string[]{}),因为这会考虑所有white-space characters,因此不仅' '而且还有标签或新线字符。

答案 2 :(得分:0)

如果文本框以&#34;结尾,我不知道你为什么要返回。 &#34 ;.也许它应该是下一个或继续。

如果可能有多个空格。

Regex myRege = new Regex(@"[ ]{2,}");     

string myText = regex.Replace(richTextBox1.Text, @" ");

string[] words= myText.Split(" ");

toolStripStatusLabel1.Text = "Words" + " = " + words.Length.ToString();

只是为了好玩

private string[] GetCount(string bodyText)
{
  bodyText = bodyText.Replace("  "," ");

  if(bodyText.Contains("  ")
    GetCount(bodyText)

  return bodyText.Split(' ');
}

string[] words = GetCount(richTextBox1.Text)

toolStripStatusLabel1.Text = "Words" + " = " + words.Length.ToString();