【问题标题】:Compare the two textbox values in ASP.NET比较 ASP.NET 中的两个文本框值
【发布时间】:2020-10-03 07:29:29
【问题描述】:

我正在比较两个文本框的值。

我正在从第二个文本框中获取更改词,但只能使用一些句子,请参阅下面的输出正常

当我在第二个文本框中写另一个句子时,问题就出现了,例如:“hello are you made”

WebForm1.aspx

<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="ftextbox" runat="server"></asp:TextBox>
            <asp:TextBox ID="stextbox" runat="server"></asp:TextBox>

            <br /><br /> 
            <asp:Button ID="Button1" runat="server" Text="Compare" OnClick="Button1_Click" />
            <br />

            <asp:Label ID="Label1" runat="server" Text=""></asp:Label><br /><br />
            <asp:Label ID="Label2" runat="server" Text=""></asp:Label><br /><br />
        </div>
    </form>
</body>
</html>

WebForm1.aspx.cs

protected void Button1_Click(object sender, EventArgs e)
{
   if (IsPostBack)
   {
       Label2.Text = "";
       Label1.Text = "";
   }

   //change word
   var result = stextbox.Text.Split(new char[] { ' ' }).Except(ftextbox.Text.Split(new char[] { ' ' })).ToArray();
   int count = result.Length;

   for (int i = 0; i < count; i++)
   {
       Label1.Text += result[i].ToString() + "&nbsp;&nbsp;&nbsp;";
   }

   Label2.Text = "Old Text is:";
   Label1.Text = "Chnage Text is:" + Label1.Text;

   //old Words
   string[] tempArr1 = ftextbox.Text.Split(' ');
   string[] tempArr2 = stextbox.Text.Split(' ');
   int counter = 0;

   for (int i = 0; i < tempArr1.Length; i++)
   {
       if (tempArr1[i] != tempArr2[i])
       {
           Label2.Text = Label2.Text + tempArr1[i] + "&nbsp;&nbsp;&nbsp;";

           counter++;
       }
   }
}

第一个图像显示完美的输出,但第二个不是。

【问题讨论】:

  • citeseerx.ist.psu.edu/viewdoc/…,是字符串比较的良好开端。根据您的一系列问题,您是否尝试实现某种 Diff,例如在代码编辑器中比较代码时?实现是否重要,还是您希望通过 3rd 方库实现最小化?

标签: c# asp.net


【解决方案1】:

当您使用Split() 将它们切割成单词然后使用Distinct() 仅获取唯一单词时,您可以获得输入中的所有唯一单词。

您现在可以使用这两个IEnumerable&lt;string&gt; 将它们与Except() 进行比较以获得不同的字符串。

比较字符串函数:

public List<string> CompareStrings(string s1, string s2) {
    // Create IEnumerable<string> of each word in the given string
    IEnumerable<string> set1 = s1.Split(' ').Distinct();
    IEnumerable<string> set2 = s2.Split(' ').Distinct();
    
    // Compare and return the Difference
    return set1.Except(set2).ToList();
}

我们现在可以调用此函数两次来检测ftextboxstextbox 相比的变化以及stextboxftextbox 的变化

示例:

protected void Button1_Click(object sender, EventArgs e) {
    string oldtText = string.Empty;

    // Get words that are different in ftextbox compared to stextbox
    foreach (string change in CompareStrings(ftextbox.Text, stextbox.Text)) {
        oldText += " " + change;
    }

    Label2.Text = "Old Text is:" + oldText;
   
    //----------------------------------------------------------------------
    string newText = string.Empty;

    // Get words that are different in stextbox compared to ftextbox
    foreach (string change in CompareStrings(stextbox.Text, ftextbox.Text)) {
        newText += " " + change;
    }

     Label1.Text = "Change Text is:" + newText;
}

【讨论】:

  • 为什么这里you是独特的关键字,而其他不是独特的关键字,因为你是唯一一次你能解释一下i.stack.imgur.com/hZ6iY.png
  • 查看这个调试器为什么实际输出和调试器不同i.stack.imgur.com/m8DOc.png
  • 啊,第一行所做的就是将所有唯一的字符串放入一个 IEnuemrable 中,并在返回时只发送不同的字符串
  • 如果我不使用 distict 关键字,那么输出很好,为什么?
  • 那是因为现在你不会输入两次。如果你做得比它强,它只会在添加.Distinct() 的情况下正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
相关资源
最近更新 更多