2010-01-25 16 views
35

मैं निम्न प्रारूप स्ट्रिंग का उपयोग करके स्ट्रिंग करने के लिए संख्या स्वरूपण कर रहा हूं "# #। ##", किसी बिंदु पर मुझे इन नंबर स्ट्रिंग्स को वापस (1 234 567) जैसे 1234567 की तरह वापस करने की आवश्यकता है। मैं इसे बाहर करने की कोशिश कर रहा हूं खाली वर्ण लेकिन पाया गया किचार स्रोत का मतलब मेरे स्रोत कोड में क्या है?

value = value.Replace(" ", ""); 
किसी कारण और स्ट्रिंग के लिए

1 234 567. रहने स्ट्रिंग मैंने पाया कि

मूल्य [1] 160.

मैं सोच रहा था है को देखने के बाद क्या मूल्य 160 का मतलब है?

+2

इस तरह के यूनिकोड कोडपॉइंट्स को खोजने के लिए विंडोज में बनाया गया एक अच्छा एप्लेट है। Charmap.exe –

+0

का उपयोग करें मैंने इसे चलाने की कोशिश की लेकिन मैं विंडोज 2008 – gyurisc

+0

@ हंसपैसेंट पर नहीं कर सका क्या आपने 2010 में एप्लेट कहा था? – asyncwait

उत्तर

41

उत्तर Unicode Code Charts में देखने के लिए है - जहां आपको Latin-1 supplement chart मिलेगा; इससे पता चलता है कि यू +00 ए 0 (160 आपके शीर्षक के अनुसार, शरीर के अनुसार 167 नहीं) एक गैर-ब्रेकिंग स्पेस है।

22

शायद तुम सकता है एक regex का उपयोग करने के लिए उन खाली वर्ण को बदलने के लिए होगा:

Regex.Replace(input, @"\p{Z}", ""); 

यह "any kind of whitespace or invisible separator" निकाल देंगे।

2

यह Char.IsWhiteSpace का उपयोग कर सफेद स्थान के रूप में वर्गीकृत कोई भी वर्ण को दूर करने के लिए एक तेज (और काफी पठनीय) तरीका है:, यदि आप जानते हैं कि आप केवल अपने डेटा से संख्या की आवश्यकता होगी,

StringBuilder sb = new StringBuilder (value.Length); 
foreach (char c in value) 
{ 
    if (!char.IsWhiteSpace (c)) 
     sb.Append (c); 
} 
string value= sb.ToString(); 

dbemerlin के रूप में अंक बाहर आप बेहतर इस्तेमाल Char.IsNumber या यहां तक ​​कि अधिक प्रतिबंधात्मक Char.IsDigit होगा:

StringBuilder sb = new StringBuilder (value.Length); 
foreach (char c in value) 
{ 
    if (char.IsNumber(c)) 
     sb.Append (c); 
} 
string value= sb.ToString(); 

आप संख्या और दशमलव seperators की जरूरत है, कुछ इस तरह पर्याप्त होना चाहिए:

StringBuilder sb = new StringBuilder (value.Length); 
foreach (char c in value) 
{ 
    if (char.IsNumber(c)|c == System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) 
     sb.Append (c); 
} 
string value= sb.ToString(); 
+0

दशमलव विभाजक के बारे में कैसे? Char.IsDigit() और Char.IsNumber() भी छोड़ देंगे? – gyurisc

+0

@ AskAboutGadgets.com, हाँ IsNumber और IsDigit दशमलव सेपरेटर के लिए झूठी वापसी करते हैं। मैंने एक नया उदाहरण जोड़ा है –

+0

मैं "||" पसंद करूंगा इसके बजाय स्थिति में "|" पठनीयता के लिए। – Xantix

10

value.Replace(Convert.ToChar(160).ToString(),"")

+0

मूल्य। बदलें (((चार) 160)। टॉस्ट्रिंग(), "") कम टाइपिंग के लिए – cryss

1

मैं char overload version उपयोग करने का सुझाव होगा:

value = value.Replace(Convert.ToChar(160), ' ') 
0

विस्तारित तरीकों के साथ समाधान:

public static class ExtendedMethods 
{ 
    public static string NbspToSpaces(this string text) 
    { 
     return text.Replace(Convert.ToChar(160), ' '); 
    } 
} 

और यह इस कोड के साथ इस्तेमाल किया जा सकता:

value = value.NbspToSpaces(); 
0

रीजिक्स विधि के साथ सभी रिक्त वर्णों को प्रतिस्थापित करने के लिए पसंदीदा तरीका नहीं होगा (और यह प्रश्नकर्ता क्या करना चाहता था) जो रूबेंस पहले ही पोस्ट कर चुके हैं?

Regex.Replace(input, @"\p{Z}", ""); 

या क्या Expresso पता चलता है:

Regex.Replace(input, @"\p{Zs}", ""); 

अंतर है कि यहाँ \ p {जेड} खाली स्थान या अदृश्य विभाजक के किसी भी प्रकार की जगह जबकि \ p {Zs} एक खाली स्थान के चरित्र है कि बदल देता है अदृश्य, लेकिन अंतरिक्ष लेता है। आप इसे यहाँ पढ़ सकते हैं (धारा यूनिकोड श्रेणियाँ):

http://www.regular-expressions.info/unicode.html

का उपयोग रेगुलर एक्सप्रेशन से लाभ यह है कि केवल एक ही आदेश भी सामान्य व्हाइटस्पेस को बदलने के लिए की जरूरत है और न केवल नॉन-ब्रेकिंग स्पेस जैसे कुछ में विस्तार से बताया है ऊपर जवाब

यदि प्रदर्शन करने का तरीका है तो निश्चित रूप से अन्य विधियों पर विचार किया जाना चाहिए लेकिन यह यहां दायरे से बाहर है।

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