计算富文本框中所有单词的最有效方法是什么?我正在编写文本编辑器,需要提供实时字数统计。现在我正在使用这个扩展方法:publicstaticintWordCount(thisstrings){s=s.TrimEnd();如果(String.IsNullOrEmpty(s))返回0;整数计数=0;boollastWasWordChar=false;foreach(charcins){if(Char.IsLetterOrDigit(c)||c=='_'||c=='''||c=='-'){lastWasWordChar=true;继续;}if(lastWasWordChar){lastWasWordChar=false;计数++;}}如果(!lastWasWordChar)计数--;返回计数+1;我将其设置为每十分之一秒在richtextbox的文本上运行一次字数统计(如果每次运行该方法时选择都以前一个不同开始)。问题是在处理非常长的文件时,字数统计会减慢。为了解决这个问题,我正在考虑只对当前段落运行字数统计,每次记录字数统计,并将其与上一个字数统计运行的字数统计进行比较。然后它将两者之间的差异添加到总字数中。这样做会导致很多复杂情况(如果用户粘贴,如果用户删除段落等)这是提高我的字数的合理方法吗?或者有一些我不知道哪个会让它变得更好?编辑:它可以在不同的线程上运行字数统计吗?我对线程了解不多,将研究它。我使用的示例文本:您可以根据空白区域进行更简单的字数统计:}MSDN提供了这个示例,它应该可以更快地为您提供大文件的准确字数统计。您还可以使用一个非常简单的正则表达式来查找至少一个单词字符和/或一个撇号来捕获缩写:publicstaticintWordCount(thisstrings){returnRegex.Matches(s,@"[w']+")。数数;这将返回2141个匹配项(在这种情况下实际上比Word更正确,因为Word将单个星号计为句子“stab*withfinger”中的一个词)。您的方法实际上比建议的String.Split方法更快,在x86上快近三倍,在x64上快两倍以上。我怀疑JIT打乱了你的时间安排,总是运行你的微基准测试两次,因为JIT会在你第一次运行它时占用你的大部分时间。而且因为String.Split已经是NGEN,不需要编译成本地代码,所以会显得更快。更不用说它也更准确了,String.Split在这里计算7个单词:Test::Thisisatestitalsomeansense,String.Splitdoesn'tperformanymagic,ifcreatinganarraywithmanystringsthanIwouldbe非常惊讶的是,简单地迭代字符串中的单个字符会更快。对字符串的预测显然是高度优化的,当我尝试使用不安全的指针算法时,它实际上比简单的foreach慢一点。我真的怀疑是否有办法更快地做到这一点,除了聪明地了解文本的哪些部分需要字数统计。以上就是C#学习教程:统计richtextbox中所有单词的最高效方法是什么?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
