2010-10-07 11 views
48

कन्वर्ट करने के लिए जुड़ें। त्वरित प्रश्न यहां। मैं String.Join का उपयोग कर एक सरणी को एक स्ट्रिंग में परिवर्तित कर रहा हूं। मेरे पास एक छोटी सी समस्या यह है कि, सरणी में कुछ इंडेक्स पद खाली होंगे। एक उदाहरण नीचे है:स्ट्रिंग का उपयोग करने के बाद स्ट्रिंग से अतिरिक्त कॉमा हटाएं। सरणी को स्ट्रिंग (सी #)

array[1] = "Firstcolumn" 
array[3] = "Thirdcolumn" 

String.Join (",", सरणी) का उपयोग करके ;, मैं निम्नलिखित मिल जाएगा:

Firstcolumn ,, Thirdcolumn

नोट अतिरिक्त ,। स्ट्रिंग से अतिरिक्त कॉमा को कैसे हटाया जा सकता है, या आदर्श रूप से स्ट्रिंग.जॉइन का उपयोग करते समय रिक्त सूचकांक शामिल नहीं कर सकते?

+0

के बाद उपयोग string.Replace में शामिल होने के (",,", ", "); –

+5

@sh_kamalh वह "1, 2" के मामले को संभाल नहीं पाएगा। –

उत्तर

83

इस :) का प्रयास करें:

var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s))); 

यह केवल तार जो null या "" नहीं है में शामिल हो जाएगा।

+17

मुझे यह तथ्य पसंद है कि आप समस्या के कारण से निपट रहे हैं और न ही किसी हैक के साथ समस्या को बांट रहे हैं! लिखने के समय –

3

आप खाली फ़ील्ड को हटाने के लिए linq का उपयोग कर सकते हैं।

var joinedString = String.Join(",", array.Where(c => !string.IsNullOrEmpty(c)); 
+0

उन्होंने विशेष रूप से पूछा कि कैसे, सिद्धांत में नहीं, आपूर्ति कोड आज़माएं? –

34

शामिल होने से पहले रिक्त आइटम को फ़िल्टर करके, लिनक का उपयोग करने के लिए एक सरल समाधान होगा।

// .net 3.5 
string.Join(",", array.Where(item => !string.IsNullOrEmpty(item)).ToArray()); 

.NET 4.0 में यदि आप भी केवल (है कि में ध्यान दें .NET 4.0 आप की जरूरत नहीं है आइटम है कि खाली हैं या व्हाइट स्पेस वर्ण होने बाहर फ़िल्टर करना चाहते हैं तो आप भी string.IsNullOrWhiteSpace का उपयोग कर सकता इस मामले में ToArray कहते हैं):

// .net 4.0 
string.Join(",", array.Where(item => !string.IsNullOrWhiteSpace(item))); 
+4

+1 को ToArray का उल्लेख करने का एकमात्र उत्तर है (जिस तरह से .NET 4 में अनावश्यक है)। –

+4

+1 एक .NET <= 4 समाधान :) –

1

एक्सटेंशन विधि:

public static string ToStringWithoutExtraCommas(this object[] array) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (object o in array) 
    { 

     if ((o is string && !string.IsNullOrEmpty((string)o)) || o != null) 
      sb.Append(o.ToString()).Append(","); 
    } 

    sb.Remove(sb.Length - 1, 1); 

    return sb.ToString(); 
} 
+0

यह किसी भी कॉमा को सम्मिलित नहीं करेगा। लेकिन वह * चाहता है * अल्पविराम, खाली प्रविष्टियों के बाद नहीं। – gehho

+0

ओह, इसे संपादित करना, धन्यवाद –

+0

-1 एक स्ट्रिंग खाली होने के बिना खाली हो सकती है, जिसमें अतिरिक्त कॉमा शामिल हैं। – bernhof

1

नियमित अभिव्यक्ति समाधान:

yourString = new Regex(@"[,]{2,}").Replace(yourString, @","); 
1
String.Join(",", array.Where(w => !string.IsNullOrEmpty(w)); 
0
string.Join(",", Array.FindAll(array, a => !String.IsNullOrEmpty(a))); 

कैसे इस एक के बारे में? LINQ समाधान की तुलना में विपक्ष और पेशेवर? कम से कम यह छोटा है।

0
string.Join(",", string.Join(",", array).Split({","}, StringSplitOptions.RemoveEmptyEntries)); 

वी ('_') वी

0

सरल विस्तार विधि

namespace System 
{ 
    public static class Extenders 
    { 
     public static string Join(this string separator, bool removeNullsAndWhiteSpaces, params string[] args) 
     { 
      return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args); 
     } 
     public static string Join(this string separator, bool removeNullsAndWhiteSpaces, IEnumerable<string> args) 
     { 
      return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args); 
     } 
    } 
} 

उपयोग:

var str = ".".Join(true, "a", "b", "", "c"); 
//or 
var arr = new[] { "a", "b", "", "c" }; 
str = ".".Join(true, arr); 
संबंधित मुद्दे