我有这个项目来突出显示两个文件中的常见语句。
因此,我在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;
}
}
其中rtb1
和rtb2
是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问题就有可能发展为全球性危机。