Сравните два значения текстового поля в ASP.NET

#c# #asp.net

#c# #asp.net

Вопрос:

Я сравниваю два значения текстового поля.

Я извлекаю слово changes из второго текстового поля, но работаю только с некоторым предложением, см. Ниже, Вывод нормально

вывод идеальный

Проблема возникает, когда я пишу другое предложение во втором текстовом поле, например: «Привет, ты сделан»

вывод не идеален

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()   "amp;nbsp;amp;nbsp;amp;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]   "amp;nbsp;amp;nbsp;amp;nbsp;";

           counter  ;
       }
   }
}
  

Первое изображение показывает идеальный результат, а второе — нет.

Комментарии:

1. citeseerx.ist.psu.edu/viewdoc /… , является хорошим началом для сравнения строк. Основываясь на вашей серии вопросов, пытаетесь ли вы реализовать какую-то разницу, например, при сравнении кодов в редакторе кода? Важна ли реализация или вам нужен мини-файл через стороннюю библиотеку?

Ответ №1:

Вы можете получить все уникальные слова во входных данных, когда вы используете Split() , чтобы разрезать их на слова, а затем использовать Distinct() , чтобы получить только уникальные слова.

Теперь вы можете использовать эти два IEnumerable<string> для их сравнения Except() , чтобы получить разные строки.

Функция CompareString:

 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();
}
  

Теперь мы можем вызвать эту функцию дважды, чтобы обнаружить изменения в ftextbox сравнении с stextbox и изменения в stextbox сопоставлении с ftextbox

Пример:

 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;
}
  

Комментарии:

1. почему здесь you ключевое слово distinct, а другое ключевое слово не является distinct, потому что вы только один раз, не могли бы вы объяснить i.stack.imgur.com/hZ6iY.png

2. посмотрите этот отладчик, почему фактический вывод и отладчик отличаются i.stack.imgur.com/m8DOc.png

3. Ах, это то, что делает первая строка, — это помещает все уникальные строки в IEnuemrable, а в возврате вы отправляете только те, которые отличаются

4. если я не использую ключевое слово distict, тогда вывод в порядке, почему?

5. Это потому, что сейчас вы не вводите слово дважды. Если вы сделаете это жестко, это будет корректно работать только с .Distinct() добавленным.