查找/替换函数富文本框
本文关键字:文本 函数 替换 查找 | 更新日期: 2023-09-27 18:32:47
我想为我的 RichTextBox 做一个查找和查找和替换函数。到目前为止,我发现.Find(( 函数非常方便,但我想不出让它跳到文本框中的下一个单词的好方法。
到目前为止,我有这个:
BeginIndex = txtDocument.Find(str, BeginIndex + WordLength, RichTextBoxFinds.None);
WordLength = str.Length;
BeginIndex 是一个公共变量,以 0 开头,与 WordLength 相同。这样,它将开始查看第一个字符,下次它不会找到相同的字符。不过有一个很大的故障,让我试着描述一下:"Hello blablab hello blablaal balbalbla hello blabla" 如果我在这个句子中寻找"hello",它将选择第一个hello,然后是第二个,然后是第三个,然后是第三个。之后,它将一遍又一遍地找到第二个和第三个。因为字长仍然是>0。
所以我需要一种新的方法来告诉 Find(( 方法不允许找到已经找到的那个,但继续前进,当找到最后一个时,回到第一个。有没有更干净、更好的方法可以做到这一点?
编辑:它几乎固定了,我现在使用它:
BeginIndex = txtDocument.Find(str, BeginIndex, RichTextBoxFinds.None);
if(BeginIndex == -1) {
BeginIndex = 0;
SearchString(str, heelwoord, casesensitive);
}
BeginIndex += str.Length;
现在,这循环非常好,而不是调用自己(int the if(,我还可以制作一个消息框,说"结束已到达!但如果它什么也没找到,它就会给我一个错误。我将函数与 2 个复选框一起使用,一个执行 MatchCase,另一个执行 WholeWord,但是当我在"asdasdasd"中查找"a"并检查 WholeWord 时,它会出错,因为它找不到。
实现Knuth-Morris Pratt的算法,它可能比内部.NET解决方案更快,它将允许你确切地知道字符串的位置。之后你可以做子字符串连接魔术,将结果分配给 rtf 的文本,你就准备好了。
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm