Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String Equals() method fails even though the two strings are same in C#?

Tags:

c#

I want to compare whether two strings are equal or not in C# using the Equals() method of the string class. But even though both strings are same, my conditional check is failing.

I have seen that both strings are equal and also verified this at the http://text-compare.com/ site. I don't know what is the issue here...

My code is :

protected string getInnerParaOnly(DocumentFormat.OpenXml.Wordprocessing.Paragraph currPara, string paraText)
        {
            string currInnerText = "";
            bool isChildRun = false;

        XmlDocument xDoc = new XmlDocument();
        xDoc.LoadXml(currPara.OuterXml);
        XmlNode newNode = xDoc.DocumentElement;

        string temp = currPara.OuterXml.ToString().Trim();

        XmlNodeList pNode = xDoc.GetElementsByTagName("w:p");
        for (int i = 0; i < pNode.Count; i++)
        {
            if (i == 0)
            {
                XmlNodeList childList = pNode[i].ChildNodes;
                foreach (XmlNode xNode in childList)
                {
                    if (xNode.Name == "w:r")
                    {
                        XmlNodeList childList1 = xNode.ChildNodes;
                        foreach (XmlNode xNode1 in childList1)
                        {
                            if (xNode1.Name == "w:t" && xNode1.Name != "w:pict")
                            {
                                currInnerText = currInnerText + xNode1.InnerText;
                            }
                        }
                    }
                }
              if (currInnerText.Equals(paraText))
              {
                  //do lot of work here...
              }
   }
}

When I put a break point in and go through step by step, watching each and every character, then there is a difference in currInnerText last index. It looks like an empty char. But I already used the Trim() function. This is the picture captured during the debug process.

What is the solution for removing the empty char or any other spurious characters at the end of the currInnerText string?

enter image description here

like image 850
Saravanan Avatar asked Sep 27 '12 13:09

Saravanan


3 Answers

Try this

String.Equals(currInnerText, paraText, StringComparison.InvariantCultureIgnoreCase);
like image 127
Stefan P. Avatar answered Oct 19 '22 20:10

Stefan P.


In my case, the difference was different encoding of space character, one string contained non-breaking space (160) and the other one contained normal space (32)

it can be solved by

string text1 = "String with non breaking spaces.";
text1 = Regex.Replace(text1, @"\u00A0", " ");
// now you can compare them
like image 34
Ahmad Avatar answered Oct 19 '22 19:10

Ahmad


Try putting a breakpoint and checking the length. Also, in some cases, if the locale is not the same, the equals function does not result in true. Another method you could try(checking the length) is printing both like this ---string1---, ---string2---, this way, you could see if you have any trailing spaces. To fix this you can use string1.trim()

like image 13
Cristi M Avatar answered Oct 19 '22 20:10

Cristi M