Zliczanie ilości słów w C#

Zliczanie ilości słów w C#
char[] delimiters = new char[] {' ', '\r', '\n' };
whole_text.Split(delimiters,StringSplitOptions.RemoveEmptyEntries).Length;  

Ponieważ interesuje Cię tylko liczba słów i nie przejmujesz się pojedynczymi słowami, String.Split można uniknąć. String.Split jest przydatny, ale niepotrzebnie generuje (potencjalnie) dużą liczbę String obiektów, co z kolei niepotrzebnie obciąża śmieciarza. Dla każdego słowa w tekście nowe String obiekt musi zostać utworzony, a następnie wkrótce zebrany, ponieważ go nie używasz.

W przypadku zadania domowego może to nie mieć znaczenia, ale jeśli zawartość pola tekstowego często się zmienia i wykonujesz te obliczenia w programie obsługi zdarzeń, rozsądniej może być po prostu ręcznie iterować znaki. Jeśli naprawdę chcesz użyć String.Split , a następnie wybierz prostszą wersję, taką jak zalecana przez Yonix.

W przeciwnym razie użyj algorytmu podobnego do tego:

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++;
}

Ten kod powinien działać lepiej w przypadkach, w których między każdym słowem jest wiele spacji, możesz przetestować kod online.


Jest na to kilka lepszych sposobów, ale zgodnie z tym, co masz, wypróbuj następujące:

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 = "";

Teraz zrób dwie pętle przednie. Po jednym na każdą linię i jedno do liczenia słów w liniach.

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