2013-05-01 104 views
66

的VB.NET方法String.Join(separator, stringArray)類似於PHP的破滅,但在陣列中任何null元素與一個空字符串替換,所以thatc:忽略空字符串的String.Join方法?

Dim myArray() as String = { "a", null, "c" } 
Console.WriteLine(String.Join(", ", myArray)); 
// Prints "a, , c" 

有沒有一種簡單的方法來連接一組字符串與忽略空串的分隔符?

我不一定需要使用數組或String.Join或其他任何東西。我只需要下列轉換:

("a", "b", "c") --> "a, b, c" 
("a", null, "c") --> "a, c" 

回答

91

VB.NET

String.Join(",", myArray.Where(Function(s) Not String.IsNullOrEmpty(s)))

C#

String.Join(",", myArray.Where(s => !string.IsNullOrEmpty(s)))

+0

我收到一個錯誤:「'哪裏'不是'System.Array'的成員」。我沒有看到MSDN上'Where'的任何內容:http://msdn.microsoft.com/en-us/library/system.array.aspx – Doug 2013-05-02 12:55:24

+0

我對此有一些好運:'Array.FindAll(myArray ,Function(s)Not String.IsNullOrEmpty(s))'你能改變你的答案或解釋'Where'語句嗎? – Doug 2013-05-02 13:44:33

+2

'Where方法來自'System.Linq',http://msdn.microsoft.com/en-us/library/bb534803.aspx – Damith 2013-05-02 13:47:19

42

爲C#==>String.Join(",", arr.Where(s => !String.IsNullOrEmpty(s)));

+1

發佈與接受的答案完全相同的內容的目的https://兩年後,stackoverflow.com/a/16326071/461444? – AFract 2017-08-29 07:21:43

+3

@AFract:檢查這個https://stackoverflow.com/posts/16326071/revisions你提到的帖子是在今年初編輯的,當時他們更新了原來的答案,增加了C# – SharpCoder 2017-08-29 14:01:34

1

要在.NET 2.0(無LINQ)中執行此操作,例如,對於SQL-服務器ReportingServices,而無需爲它編寫一個函數:

VB.NET

Dim a As String = "", b As String = "b", c As String = "", d As String = "d", e As String = "" 
Dim lala As String = String.Join("/", String.Join(vbBack, New String() {a, b, c, d, e}).Split(New Char() {ControlChars.Back}, System.StringSplitOptions.RemoveEmptyEntries)) 

System.Console.WriteLine(lala) 

C#(對於那些從谷歌登陸,而不是尋找VB.NET)

string a = "", b = "b", c = "", d = "d", e = ""; 
string lala = string.Join("/", 
    string.Join("\u0008", 
     new string[] { a, b, c, d, e } 
    ).Split(new char[] { '\u0008' }, System.StringSplitOptions.RemoveEmptyEntries) 
); 

System.Console.WriteLine(lala); 

這假設字符退格不會出現在你的字符串中(通常應該是真的,因爲你不能簡單地通過鍵盤輸入這個字符)。

另外,如果你從數據庫中獲取的值,那麼它就更簡單了,因爲你可以直接做在SQL:

PostgreSQL的& MySQL的:

SELECT 
    concat_ws('/' 
     , NULLIF(searchTerm1, '') 
     , NULLIF(searchTerm2, '') 
     , NULLIF(searchTerm3, '') 
     , NULLIF(searchTerm4, '') 
    ) AS RPT_SearchTerms; 

甚至與光榮MS - SQL服務器是可能的(PS:這是諷刺):

DECLARE @in_SearchTerm1 nvarchar(100) 
DECLARE @in_SearchTerm2 nvarchar(100) 
DECLARE @in_SearchTerm3 nvarchar(100) 
DECLARE @in_SearchTerm4 nvarchar(100) 

SET @in_SearchTerm1 = N'a' 
SET @in_SearchTerm2 = N'' 
SET @in_SearchTerm3 = N'c' 
SET @in_SearchTerm4 = N'' 

SELECT 
    COALESCE 
    (
     STUFF 
     (
      (
       SELECT '/' + RPT_SearchTerm AS [text()] 
       FROM 
       (
            SELECT NULLIF(@in_SearchTerm1, N'') AS RPT_SearchTerm, 1 AS RPT_Sort 
         UNION ALL SELECT NULLIF(@in_SearchTerm2, N'') AS RPT_SearchTerm, 2 AS RPT_Sort 
         UNION ALL SELECT NULLIF(@in_SearchTerm3, N'') AS RPT_SearchTerm, 3 AS RPT_Sort 
         UNION ALL SELECT NULLIF(@in_SearchTerm4, N'') AS RPT_SearchTerm, 4 AS RPT_Sort 
       ) AS tempT 
       WHERE RPT_SearchTerm IS NOT NULL 
       ORDER BY RPT_Sort 
       FOR XML PATH(N''), TYPE 
      ).value('.', 'nvarchar(MAX)') 
      ,1 
      ,3 
      ,N'' 
     ) 
     ,N'' 
    ) AS RPT_SearchTerms