दिलचस्प पोस्ट
Joko AJAX का उपयोग करते हुए डोम हेरफेर के बाद ईवेंट संलग्न करना फार्म बहुत बड़ा अपवाद एंड्रॉइड मीडियाप्लेयर त्रुटि (1, -2147483648) किसी पाठ फ़ाइल में पंक्तियों की संख्या निर्धारित करें बिना वर्जन वस्तु को नष्ट करना मैं किसी साइट के लिए IIS एक्सप्रेस पोर्ट कैसे बदल सकता हूँ जब मैं संख्या को दबाता हूं तो टेक्स्ट पर संपादन टेक्स्ट का उपयोग कैसे करें? कंटेनर को सिकुड़ते-टू-फिट बाल तत्व बनाते हैं क्योंकि वे लपेटते हैं कैसे जावास्क्रिप्ट के माध्यम से एक्सेल उत्पन्न करने के लिए वेबव्यू के अंदर बाहरी वेबपेज को कैसे लोड करें एंड्रॉइड: कम बैटरी उपयोग के साथ Google मानचित्र स्थान .NET में प्रारूप स्ट्रिंग में ब्रेसिज़ (घुंघराले ब्रैकेट) से बचने के लिए कैसे करें Layout_gravity प्रोग्राम को कैसे सेट करें? जांच करें कि क्या कोई रजिस्टर सीएमपी रेग के साथ शून्य है, 0 बनाम या रेग, रेग? आर में ग्लोबल वैरिएबल

स्ट्रिंग में सफेद रिक्त स्थान को निकालने का सबसे तेज़ तरीका

मैं "," डेटाबेस तालिका से स्ट्रिंग के भीतर से कई ईमेल पतों को लाने की कोशिश कर रहा हूं, लेकिन यह मुझे सफेद स्थान लौटा रहा है, और मैं श्वेतस्थान को जल्दी से निकालना चाहता हूं

निम्नलिखित कोड सफेद स्थान को निकालता है, लेकिन जब भी मैं बड़ी संख्या में ईमेल पते को 30000 की तरह एक स्ट्रिंग में लाने की कोशिश करता हूं, तब भी धीमी गति से हो जाता है, और उसके बाद उन दोनों के बीच सफेद स्थान निकालने का प्रयास करें उन स्थानों को हटाने के लिए चार से पांच मिनट का समय लगता है

Regex Spaces = new Regex(@"\s+", RegexOptions.Compiled); txtEmailID.Text = MultipleSpaces.Replace(emailaddress),""); 

क्या कोई मुझे बता सकता है कि बड़ी संख्या में ईमेल पते के लिए मैं एक दूसरे के भीतर कैसे व्हाइटस्पेस निकाल सकता हूं?

Solutions Collecting From Web of "स्ट्रिंग में सफेद रिक्त स्थान को निकालने का सबसे तेज़ तरीका"

मैं StringBuilder का उपयोग कर एक कस्टम विस्तार विधि का निर्माण करेगा, जैसे:

 public static string ExceptChars(this string str, IEnumerable<char> toExclude) { StringBuilder sb = new StringBuilder(str.Length); for (int i = 0; i < str.Length; i++) { char c = str[i]; if (!toExclude.Contains(c)) sb.Append(c); } return sb.ToString(); } 

उपयोग:

 var str = s.ExceptChars(new[] { ' ', '\t', '\n', '\r' }); 

या अधिक तेज़ हो:

 var str = s.ExceptChars(new HashSet<char>(new[] { ' ', '\t', '\n', '\r' })); 

हैशसेट संस्करण के साथ, 11 लाख अक्षर की एक स्ट्रिंग 700 ms से कम लेती है (और मैं डिबग मोड में हूं)

संपादित करें:

पिछला कोड सामान्य है और किसी भी चार को बाहर करने की अनुमति नहीं है, लेकिन यदि आप सबसे तेज संभव तरीके से केवल खाली स्थान को हटाना चाहते हैं तो आप इसका उपयोग कर सकते हैं:

 public static string ExceptBlanks(this string str) { StringBuilder sb = new StringBuilder(str.Length); for (int i = 0; i < str.Length; i++) { char c = str[i]; switch (c) { case '\r': case '\n': case '\t': case ' ': continue; default: sb.Append(c); break; } } return sb.ToString(); } 

2 संपादित करें:

जैसा कि टिप्पणियों में सही ढंग से बताया गया है, सभी रिक्त स्थान को निकालने का सही तरीका char.IsWhiteSpace का उपयोग कर रहा है। char.IsWhiteSpace विधि:

 public static string ExceptBlanks(this string str) { StringBuilder sb = new StringBuilder(str.Length); for (int i = 0; i < str.Length; i++) { char c = str[i]; if(!char.IsWhiteSpace(c)) sb.Append(c); } return sb.ToString(); } 

string.Replace के क्रियान्वयन को देखते हुए। जगह को सी ++ में लिखा गया है और सीएलआर रनटाइम का हिस्सा मैं शर्त लगाने के लिए तैयार हूं

email.Replace(" ","").Replace("\t","").Replace("\n","").Replace("\r","");

सबसे तेजी से कार्यान्वयन होगा यदि आपको हर प्रकार की श्वेत स्थान की आवश्यकता है, तो आप यूनिकोड समकक्ष के हेक्स मूल्य की आपूर्ति कर सकते हैं।

आपको String.Trim() . String.Trim() कोशिश करनी चाहिए। यह सभी स्थानों को स्ट्रिंग के शुरू से अंत तक ट्रिम कर देगा

या आप लिंक किए गए विषय से इस पद्धति का प्रयास कर सकते हैं: [link]

  public static unsafe string StripTabsAndNewlines(string s) { int len = s.Length; char* newChars = stackalloc char[len]; char* currentChar = newChars; for (int i = 0; i < len; ++i) { char c = s[i]; switch (c) { case '\r': case '\n': case '\t': continue; default: *currentChar++ = c; break; } } return new string(newChars, 0, (int)(currentChar - newChars)); } 

Linq के साथ आप इसे बस कर सकते हैं:

 emailaddress = new String(emailaddress .Where(x=>x!=' ' && x!='\r' && x!='\n') .ToArray()); 

मैं इसे स्ट्रिंगबिल्ल्डर दृष्टिकोण से तुलना नहीं करता था, लेकिन स्ट्रिंग आधारित तरीकों से बहुत अधिक तेज है। क्योंकि यह कई तारों की प्रतिलिपि नहीं बनाती है (स्ट्रिंग अपरिवर्तनीय है और इसे सीधे नाटकीय ढंग से स्मृति और गति की समस्या का कारण बनती है), इसलिए यह बहुत बड़ी मेमोरी का उपयोग नहीं कर रहा है और गति को धीमा नहीं करने जा रहा है (एक अतिरिक्त पास के माध्यम से पहले स्ट्रिंग)

 emailaddress.Replace(" ", string.empty); 

कई अलग-अलग तरीके हैं, कुछ तो तेज़ हैं:

 public static string StripTabsAndNewlines(this string str) { //string builder (fast) StringBuilder sb = new StringBuilder(str.Length); for (int i = 0; i < str.Length; i++) { if ( ! Char.IsWhiteSpace(s[i])) { sb.Append(); } } return sb.tostring(); //linq (faster ?) return new string(str.ToCharArray().Where(c => !Char.IsWhiteSpace(c)).ToArray()); //regex (slow) return Regex.Replace(str, @"\s+", "") } 

String क्लास के TrimEnd() विधि का उपयोग करें आप यहां एक महान उदाहरण पा सकते हैं ।

 string str = "Hi!! this is a bunch of text with spaces"; MessageBox.Show(new String(str.Where(c => c != ' ').ToArray())); 

आपको अपने संग्रहीत कार्यविधि के भीतर रिकॉर्ड्स की जगह पर जगह लेने पर विचार करना चाहिए या यदि संभव हो तो सुधार और फ़ंक्शन का उपयोग करके क्वेरी को अपने डीबी रिकॉर्ड के ठीक से ठीक करना चाहिए क्योंकि एक ईमेल पते में स्थान अवैध है।

जैसा कि दूसरों के द्वारा उल्लेख किया गया है, आपको अलग-अलग दृष्टिकोणों को प्रोफाइल करने की आवश्यकता होगी। यदि आप रेगेक्स का प्रयोग कर रहे हैं तो आपको इसे कम से कम एक क्लास-स्तरीय स्थिर वैरिएबल बनाना चाहिए:

 public static Regex MultipleSpaces = new Regex(@"\s+", RegexOptions.Compiled); 

emailAddress.Where(x=>{ return x != ' ';}).ToString( ) लिए कार्य ओवरहेड होने की संभावना है, हालांकि इसे माइक्रोसॉफ्ट द्वारा इनलाइन करने के लिए अनुकूलित किया जा सकता है – फिर से प्रोफाइलिंग आपको जवाब देगी।

सबसे प्रभावी पद्धति बफर आवंटित करने के लिए और एक नए बफर को चरित्र के अनुसार चरित्र को प्रतिलिपि करने और आप ऐसा करते समय रिक्त स्थान को छोड़ना होगा। सी # समर्थन संकेतक का समर्थन करता है ताकि आप असुरक्षित कोड का उपयोग कर सकें, कच्चे बफर को आवंटित कर सकते हैं और सी की तरह कॉपी करने के लिए पॉइंटर अंकगणितीय का उपयोग कर सकते हैं और यह जितना तेज़ी से संभव है उतना ही हो सकता है। एसक्यूएल में REPLACE( ) इसे आपके लिए इस तरह संभाल लेंगे।

 string input =Yourinputstring; string[] strings = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); foreach (string value in strings) { string newv= value.Trim(); if (newv.Length > 0) newline += value + "\r\n"; } 
 string s = " Your Text "; string new = s.Replace(" ", string.empty); // Output: // "YourText" 

ऐसा करने के लिए सबसे तेज़ और सामान्य तरीका (लाइन टर्मिनेटर, टैब्स को भी संसाधित किया जाएगा) Regex शक्तिशाली सुविधाओं वास्तव में इस समस्या को हल करने के लिए आवश्यक नहीं है, लेकिन Regex प्रदर्शन को कम कर सकते हैं

 new string (stringToRemoveWhiteSpaces .Where ( c => !char.IsWhiteSpace(c) ) .ToArray<char>() )