2012-09-27 14 views
5

मैं तुलना करना चाहता हूं कि स्ट्रिंग क्लास के बराबर() विधि का उपयोग करके दो स्ट्रिंग बराबर हैं या सी # में नहीं हैं। लेकिन भले ही दोनों तार समान हैं, मेरी सशर्त जांच विफल हो रही है।स्ट्रिंग बराबर() विधि विफल रहता है भले ही दो स्ट्रिंग सी # में समान हों?

मैंने देखा है कि दोनों स्ट्रिंग बराबर हैं और इसे http://text-compare.com/ साइट पर भी सत्यापित किया गया है। मैं नहीं पता है क्या यहां मुद्दा यह है ...

मेरे कोड है:

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

जब मैं में एक को तोड़ने बिंदु डाल दिया और कदम से कदम के माध्यम से जाना, हर चरित्र को देख, तो currInnerText अंतिम अनुक्रमणिका में एक अंतर है। यह एक खाली चार की तरह दिखता है। लेकिन मैंने पहले से ही ट्रिम() फ़ंक्शन का उपयोग किया है। डीबग प्रक्रिया के दौरान यह तस्वीर कैप्चर की गई है।

currInnerText स्ट्रिंग के अंत में खाली चार या किसी अन्य नकली पात्रों को हटाने का समाधान क्या है?

enter image description here

+10

यह आपका वास्तविक कोड नहीं है ('बराबर()' सी # में सभी लोअरकेस नहीं है)। कृपया अपना वास्तविक कोड पेस्ट करें। – BoltClock

+0

स्पष्ट रूप से कुछ है जो आप हमें नहीं बता रहे हैं। आपके द्वारा प्रस्तुत किया गया कोड निश्चित रूप से काम करेगा यदि आप दो तारों की तुलना कर रहे हैं जो समान हैं। हमें आपका अधिक कोड देखना होगा। –

+1

आपके तार क्या हैं? – SeToY

उत्तर

7

एक ब्रेकपाइंट डालने और लंबाई देखने का प्रयास करें। इसके अलावा, कुछ मामलों में, यदि लोकेल समान नहीं है, तो बराबर फ़ंक्शन का परिणाम सही नहीं होता है। एक और तरीका जिसे आप कोशिश कर सकते हैं (लंबाई की जांच) दोनों इस तरह प्रिंट कर रहे हैं --- स्ट्रिंग 1 ---, --- स्ट्रिंग 2 ---, इस तरह, आप देख सकते हैं कि आपके पास कोई पिछली जगह है या नहीं। इसे ठीक करने के आप string1.trim() का उपयोग कर सकते

+0

धन्यवाद ... मैं इसे देखूंगा – Saravanan

10

इस

String.Equals(currInnerText, paraText, StringComparison.InvariantCultureIgnoreCase); 
3

प्रयास करें इससे पहले कि आप फोन .Equals, इस प्रयास करें:

if (currInnerText.Length != paraText.Length) 
    throw new Exception("Well here's the problem"); 

for (int i = 0; i < currInnerText.Length; i++) { 
    if (currInnerText[i] != paraText[i]) { 
     throw new Exception("Difference at character: " + i+1); 
    } 
} 

कि एक अपवाद है, तो रिटर्न झूठी बराबर फेंक चाहिए और आपको एक विचार देना चाहिए कि क्या हो रहा है।

+0

: आपकी प्यारी ट्रैकिंग तकनीकों के लिए धन्यवाद ... मैं आपको कल अपडेट कर दूंगा – Saravanan

8

मेरे मामले अंतर में अंतरिक्ष चरित्र की एन्कोडिंग, एक स्ट्रिंग नॉन-ब्रेकिंग स्पेस (160) और अन्य एक सामान्य स्थान निहित था (32)

यह

string text1 = "String with non breaking spaces."; 
text1 = Regex.Replace(text1, @"\u00A0", " "); 
// now you can compare them 
द्वारा हल किया जा सकता
+2

आपने मेरा जीवन बचाया;)। धन्यवाद –

+1

यह मेरे लिए काम किया। मेरे मामले में, मैं डीबी से एक पाठ पढ़ रहा था और दूसरा प्रोग्राम में बना रहा था और फिर दो मिलान कर रहा था। –

संबंधित मुद्दे