我正在编写一个文本编辑器,需要提供实时字数。现在我正在使用这个扩展方法:
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;
}
我已将其设置为每十分之一秒在richtextbox 的文本上运行一次字数(如果选择开始与上次运行该方法时的开始不同)。问题是在处理非常长的文件时字数会变慢。为了解决这个问题,我正在考虑只在当前段落上运行字数,每次记录字数并将其与上次运行字数时的字数进行比较。然后它将两者之间的差异添加到总字数中。这样做会导致很多并发症(如果用户粘贴,如果用户删除段落等)这是提高我的字数的合乎逻辑的方法吗?或者有什么我不知道的东西会让它变得更好吗?
编辑:在不同的线程上运行字数统计会起作用吗?我对线程不太了解,将研究。
我使用的示例文本: