Counting number of words in C#

char[] delimiters = new char[] {' ', '\r', '\n' };
whole_text.Split(delimiters,StringSplitOptions.RemoveEmptyEntries).Length;  

Since you are only interested in word count, and you don't care about individual words, String.Split could be avoided. String.Split is handy, but it unnecessarily generates a (potentially) large number of String objects, which in turn creates an unnecessary burden on the garbage collector. For each word in your text, a new String object needs to be instantiated, and then soon collected since you are not using it.

For a homework assignment, this may not matter, but if your text box contents change often and you do this calculation inside an event handler, it may be wiser to simply iterate through characters manually. If you really want to use String.Split, then go for a simpler version like Yonix recommended.

Otherwise, use an algorithm similar to this:

int wordCount = 0, index = 0;

// skip whitespace until first word
while (index < text.Length && char.IsWhiteSpace(text[index]))
    index++;

while (index < text.Length)
{
    // check if current char is part of a word
    while (index < text.Length && !char.IsWhiteSpace(text[index]))
        index++;

    wordCount++;

    // skip whitespace until next word
    while (index < text.Length && char.IsWhiteSpace(text[index]))
        index++;
}

This code should work better with cases where you have multiple spaces between each word, you can test the code online.


There are some better ways to do this, but in keeping with what you've got, try the following:

string whole_text = richTextBox1.Text;
string trimmed_text = whole_text.Trim();

// new line split here
string[] lines = trimmed_text.Split(Environment.NewLine.ToCharArray());

// don't need this here now...            
//string[] split_text = trimmed_text.Split(' ');

int space_count = 0;
string new_text = "";

Now make two foreach loops. One for each line and one for counting words within the lines.

foreach (string line in lines)
{
    // Modify the inner foreach to do the split on ' ' here
    // instead of split_text
    foreach (string av in line.Split(' '))
    {
        if (av == "")
        {
            space_count++;
        }
        else
        {
            new_text = new_text + av + ",";
        }
    }
}

new_text = new_text.TrimEnd(',');

// use lines here instead of split_text
lines = new_text.Split(',');
MessageBox.Show(lines.Length.ToString());
}

Tags:

C#