我需要一种更快的方法来突出显示RichTextBox中的文本

时间:2018-12-19 12:34:34

标签: c#

我有这个项目来突出显示两个文件中的常见语句。
因此,我在RichTextBox中阅读了它们中的每一个,并找到了常见的语句,并将它们放入一个字符串,这里名为output。 现在,我需要的是一种更快的方式,以仅突出显示两个RichTextBoxes中的公共语句。

这是我的代码:

string[] splitted = output.Split('.');

int index1;

for (int i = 0; i < splitted.Length; i++)
{
   index1 = 0;
   while (index1 < rtb1.Text.LastIndexOf(splitted[i]) + 1)
   {
      rtb1.Find(splitted[i], index1, rtb1.TextLength, RichTextBoxFinds.None);
      rtb.SelectionBackColor = Color.Yellow;
      index1 = rtb1.Text.IndexOf(splitted[i], index1) + 1;
   }
}

for (int i = 0; i < splitted.Length; i++)
{
   index1 = 0;
   while (index1 < rtb2.Text.LastIndexOf(splitted[i]) + 1)
   {
      rtb2.Find(splitted[i], index1, rtb2.TextLength, RichTextBoxFinds.None);
      rtb.SelectionBackColor = Color.Yellow;
      index1 = rtb.Text.IndexOf(splitted[i], index1) + 1;
   }
}

其中rtb1rtb2是RichTextBoxes。
我从另一个线程那里获得了突出显示的代码。现在我相信这段代码需要O(N ^ 3)甚至更多。
我最多需要将其优化为O(N ^ 2)。我将不胜感激。

编辑:
我也尝试使用Regex.Matches

Regex reg = new Regex(output, RegexOptions.Compiled);
MatchCollection matches = reg.Matches(rtb1.Text);

foreach (Match match in matches)
{
   rtb1.Select(match.Index, match.Length);
   rtb1.SelectionBackColor = Color.Yellow;
}

rtb1包含以下内容:

  

[1]研究2000年问题的影响2000年(Y2K)技术问题起初是一种无害的短期解决方案,可以解决1950年代和1960年代令人难以置信的高昂成本。   [2]程序员希望,由于公司,政府和其他计算机所有者更新了他们的硬件和软件,因此有限的两位数日期存储方法所产生的问题将解决。   [3]计算机问世50年后,Y2K问题就有可能发展为全球性危机。

rtb2包含:

  

[1]研究2000年问题的影响2000年(Y2K)技术问题起初是一种无害的短期解决方案,可以解决1950年代和1960年代令人难以置信的高昂成本。   [3]计算机问世50年后,Y2K问题有可能发展为全球性危机。

output应该包含:

  

[1]研究2000年问题的影响2000年(Y2K)技术问题起初是一种无害的短期解决方案,可以解决1950年代和1960年代令人难以置信的高昂成本。   [3]计算机问世50年后,Y2K问题就有可能发展为全球性危机。

0 个答案:

没有答案