【问题标题】:Comparing text in two Richtextboxes and get the differences比较两个 Richtextboxes 中的文本并获取差异
【发布时间】:2020-06-21 11:07:09
【问题描述】:

我想比较两个 richtextboxes 之间的文本,并获得第三个的差异。不突出显示文本。 到目前为止,最好的选择是this solution

第一个解决方案有效,但它不会从richtextbox1 中删除richtextbox2 中的文本。 结束了,用户问了

如果它们相同,则什么也不做。

我的情况完全相反,但我仍然找不到解决方案。

谢谢

【问题讨论】:

    标签: vb.net loops compare richtextbox


    【解决方案1】:

    首先,您需要在表单中添加一个名为 (combobox1) 的组合框 然后在其中添加这些项目:

    RichTextbox1 - RichTextbox2

    RichTextbox2 - RichTextbox1

    其次,添加一个名为(button1)的按钮,在这个按钮下点击事件 插入此代码:

    RichTextBox3.Clear()
    If RichTextBox1.Text <> "" And RichTextBox2.Text <> "" And RichTextBox1.Text <> RichTextBox2.Text And ComboBox1.SelectedItem = "RichTextbox1 - RichTextbox2" Then
        Dim txt1(RichTextBox1.Text.Split(" ").Length) As String
        Dim txt2(RichTextBox2.Text.Split(" ").Length) As String
        txt1 = RichTextBox1.Text.Split(" ")
        txt2 = RichTextBox2.Text.Split(" ")
        Dim diff1 As String = ""
        For Each diff As String In txt1
            If Array.IndexOf(txt2, diff.ToString) = -1 Then
                diff1 += diff.ToString & " "
            End If
        Next
        RichTextBox3.Text = diff1.ToString
    End If
    
    If RichTextBox1.Text <> "" And RichTextBox2.Text <> "" And RichTextBox1.Text <> RichTextBox2.Text And ComboBox1.SelectedItem = "RichTextbox2 - RichTextbox1" Then
        Dim txt1(RichTextBox1.Text.Split(" ").Length) As String
        Dim txt2(RichTextBox2.Text.Split(" ").Length) As String
        txt1 = RichTextBox1.Text.Split(" ")
        txt2 = RichTextBox2.Text.Split(" ")
        Dim diff2 As String = ""
        For Each diff As String In txt2
            If Array.IndexOf(txt1, diff.ToString) = -1 Then
                diff2 += diff.ToString & " "
            End If
        Next
        RichTextBox3.Text = diff2.ToString
    End If
    

    现在,您有 2 个选择: 如果您从组合框中选择(RichTextbox1 - RichTextbox2)然后单击按钮,richtextbox3 将显示在richtextbox1 中找到而在richtextbox2 中没有找到的文本,而如果您选择(RichTextbox2 - RichTextbox1),则会发生相反的情况

    最后,如果2个richtextboxes相同,什么都不会发生

    • 你也可以使用 String.Join *

    在Button1点击事件下,将这段代码替换为之前的代码:

    Dim intsA = RichTextBox1.Text.Split(" ")
    Dim intsB = RichTextBox2.Text.Split(" ")
    Dim myresult = intsA.Except(intsB).ToArray()
    RichTextBox3.Text = String.Join(" ", myresult)
    

    如果你觉得这很有用,请将其标记为答案

    【讨论】:

    • 嗨 GME,谢谢。不幸的是,您的代码将完美地比较两行文本。我希望在 rtb2 中替换 rtb1 中的单词与它们的位置无关。如果“X”包含在 rtb1 的开头但在 rtb2 的末尾,那么我希望它考虑它并消除它。我想消除从 rtb1 到 rtb2 的所有内容。希望清楚。 THX
    • 你认为有可能吗?
    • 我不确定我是否理解你,例如我接受了你上面的评论并快速尝试,首先我将它复制到 2 个富文本框并按下按钮(没有结果),然后我只从第二个框中删除了(如果“X”是)之后的单词(包含)(结果是删除的单词包含),然后我再次添加了单词包含但在框2中的段落末尾(结果又没什么了),代码非常适合您的想法,如果您仍需要修改,请给我一个您要处理的文本示例,我将为您编辑代码。
    • 嗨@GME,感谢您的回答。我会尝试更具体地让图像说话。 link
    • 附注还有C5不在A4的同一行,所以应该在下一行。
    猜你喜欢
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多