私はテキスト エディターを作成しており、実際の単語数を提供する必要があります。現在、私はこの拡張メソッドを使用しています:
public static int WordCount(this string s)
{
s = s.TrimEnd();
if (String.IsNullOrEmpty(s)) return 0;
int count = 0;
bool lastWasWordChar = false;
foreach (char c in s)
{
if (Char.IsLetterOrDigit(c) || c == '_' || c == '\'' || c == '-')
{
lastWasWordChar = true;
continue;
}
if (lastWasWordChar)
{
lastWasWordChar = false;
count++;
}
}
if (!lastWasWordChar) count--;
return count + 1;
}
リッチテキスト ボックスのテキストに対して 10 分の 1 秒ごとに単語カウントが実行されるように設定しました (選択の開始が前回のメソッド実行時と異なる場合)。問題は、非常に長いファイルで作業すると単語カウントが遅くなることです。これを解決するために、現在の段落でのみ単語数を実行し、毎回単語数を記録し、前回単語数を実行したときの単語数と比較することを考えています。次に、2 つの単語の差を合計単語数に追加します。これを行うと、多くの複雑さが生じます (ユーザーが貼り付けた場合、ユーザーが段落を削除した場合など)。これは単語数を改善するための論理的な方法ですか? それとも、それをより良くするかについて私が知らない何かがありますか?
編集:別のスレッドでワードカウントを実行するとうまくいきますか? スレッドについてはよくわかりません。調査します。
私が使用したサンプル テキスト: