2010-10-07 69 views
48

快速問題。我使用String.Join將數組轉換爲字符串。我遇到的一個小問題是,在數組中,一些索引位置將是空白的。下面是一個例子:使用String.Join將數組轉換爲字符串(C#)後,從字符串中除去額外的逗號。

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

使用的string.join( 「」 陣列);,我會得到如下:

Firstcolumn ,, Thirdcolumn

注額外的,。如何從字符串中刪除額外的逗號,或者在使用String.Join時理想情況下不包含空白索引?

+0

加入使用後與string.replace(」 ,, 「」 「); – 2010-10-07 17:39:26

+5

@sh_kamalh這不會處理「1 ,,, 2」的情況。 – 2010-10-07 19:19:09

回答

83

試試這個:):

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

這將加入只有這不是null""的字符串。

+17

我喜歡你正在處理問題的原因,而不是僅僅用黑客來包紮問題! – 2010-10-07 13:02:35

3

您可以使用linq刪除空字段。

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

他問具體問題,不僅在理論上,嘗試供應代碼? – 2010-10-07 13:00:42

34

一個簡單的解決方案是使用linq,在加入之前過濾掉空的項目。

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

在.NET 4.0中,你還可以利用string.IsNullOrWhiteSpace,如果你也想過濾掉所有空或由空格字符的項目只(請注意,在.NET 4.0中,你不必調用ToArray在這種情況下):

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

+1在撰寫本文時是提及ToArray的唯一答案(順便說一句,在.NET 4中是不必要的)。 – 2010-10-07 13:03:18

+4

+1對於.Net <= 4解決方案:) – 2010-10-07 13:05:32

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 2010-10-07 13:09:18

+0

糟糕,編輯它,謝謝 – 2010-10-07 13:10:12

+0

-1一個字符串可以是空的而不爲null,在這種情況下,無論如何都會包含額外的逗號。 – bernhof 2010-10-07 13:13:05

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)); 

V( '_')V

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); 
相關問題