c# - How to replace every second space, but not first/last with " " in a given string? -


मान लें कि मेरे पास निम्न स्ट्रिंग है:

  string s = "ABCD TESTTEST BLA BLA टेस्ट टेस्ट 2 " 

फिर मुझे निम्नलिखित की आवश्यकता है:

 " एबी एंड सीसीडीसीएडी एंड amp; nbsp; टेस्टटेस्ट एंड बीबीए बीएलए & amp; nbsp; एंड एंडीज & amp; nbsp; टेस्ट & amp; nbsp; & amp; nbsp; & amp; nbsp; टेस्ट 2 " 

तो नियम हैं:
ए) & amp; nbsp; बी) के साथ हर दूसरी जगह ( गैर अंतरिक्ष वर्णों के बीच ) की जगह यदि अंतिम स्थान को & amp; ; Nbsp; , इसे पीछे की ओर बढ़ने का प्रयास करें (यदि संभव हो तो) एक कदम तो अगले स्थान बल अंतरिक्ष से नहीं छुआ है

पृष्ठभूमि:

मैं उस डेटाबेस का डेटा मेरी वेबसाइट पर प्रिंट करने के लिए उपयोग करना चाहता हूं। लेकिन मैं कम स्थान का उपयोग करने के लिए मजबूर स्थानों को अनुकूलित करना चाहता हूं। मैं भी आखिरी मजबूर जगह चाहता हूं कि अगले शब्द को स्पर्श न करें (यदि संभव हो) तो कुछ खोज इंजनों को उस शब्द को पकड़ना आसान होता है।

क्या मुझे उस स्ट्रिंग में प्रत्येक चार के माध्यम से पाश की आवश्यकता होगी घटना या वहाँ एक आसान, तेज और अधिक फैंसी तरीका है?

धन्यवाद, दोनों समाधान एकदम सही काम कर रहे हैं।
तो मैंने यह पता लगाने के लिए एक बेंचमार्क किया था कि कौन सा समाधान स्वीकार करने के लिए:

@ गफ़ा, आपके हल के लिए 1 मिलियन रनों के लिए 22 सेकंड की आवश्यकता है @Timwi, आपके हल के लिए 1 मिलियन रन के लिए 7 सेकंड की आवश्यकता है

मैं आपको दोनों को एक अपवाद, लेकिन मैं टिमवी के समाधान को स्वीकार करूंगा।

  var इनपुट = "एबीसीडी टेस्टीस्ट बीएलए बीएलए टेस्ट टेस्ट 2"; Var output = Regex.Replace (इनपुट, @ "+", m = & gt; m.Length == 2? "& Amp; nbsp;": m.Length% 2 == 1? "& Amp; nbsp; दोहराएं ( M.Length / 2) + "": "& amp; nbsp;" दोहराएं (मी। लांघ / 2 - 1) + "& amp; nbsp;");  

यह मैंने लिखा एक string.Repeat एक्सटेंशन विधि का उपयोग करता है:

  /// & lt; सारांश & gt; /// वर्तमान स्ट्रिंग के पुनरावृत्तियों की निर्दिष्ट संख्या को संरेखित करता है। /// & lt; / सारांश & gt; /// & lt; परम नाम = "इनपुट" & gt; दोहराया जाने वाला स्ट्रिंग। & Lt; / param & gt; /// & lt; param name = "numtime" & gt; स्ट्रिंग दोहराने की संख्या। & Lt; / param & gt; /// & lt; रिटर्न & gt; एक संकीर्ण स्ट्रिंग जिसमें मूल स्ट्रिंग को बार की निर्दिष्ट संख्या है। & Lt; / returns & gt; सार्वजनिक स्थैतिक स्ट्रिंग दोहराएं (यह स्ट्रिंग इनपुट, इंट संख्या-समय) {if (numTimes == 0) "" वापसी; यदि (संख्या टाइम्स == 1) वापसी इनपुट; यदि (संख्याएं == 2) इनपुट + इनपुट लौटाते हैं; Var sb = नया स्ट्रिंगबिल्डर (); के लिए (इंट i = 0; i & lt; संख्या टाइम्स; i ++) sb.Append (इनपुट); वापसी sb.ToString (); }  

वैसे, अगर "बचत स्थान" से आप बैंडविड्थ / भंडारण स्थान का संदर्भ दे रहे हैं, आप का उपयोग कर इसे और अधिक कॉम्पैक्ट बना सकते हैं। "& amp; nbsp;" की बजाय "\ xa0" , जो HTML में बराबर है।


Comments