我正在编写一个文本编辑器,需要提供实时字数统计。现在我正在使用这个扩展方法:
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 的文本上运行一次字数统计(如果选择开始与上次该方法运行时不同)。问题是处理很长的文件时字数统计会变慢。为了解决这个问题,我正在考虑仅在当前段落上运行字数统计,每次记录字数统计并将其与上次运行字数统计时的字数进行比较。然后它将两者之间的差异添加到总字数中。
这样做会导致许多复杂化(如果用户粘贴,如果用户删除段落等)
这是提高字数的合乎逻辑的方法吗?或者有什么我不知道的事情可以让它变得更好?
编辑:
在不同的线程上运行字数统计是否有效?我对线程了解不多,会研究一下。
我使用的示例文本:
您可以根据空白进行更简单的字数统计:
public static int WordCount(this string s)
{
return s.Split(new char[] {' '},
StringSplitOptions.RemoveEmptyEntries).Length;
}
MSDN提供了这个例子 http://msdn.microsoft.com/en-us/library/bb383977.aspx,应该可以更快地为您提供大型文件的准确字数统计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)