Строка.Метод Join, который игнорирует пустые строки?
VB.NET метод String.Join(separator, stringArray) похож на PHP implode, но любые нулевые элементы в массиве заменяются пустой строкой, поэтому thatc:
Dim myArray() as String = { "a", null, "c" }
Console.WriteLine(String.Join(", ", myArray));
// Prints "a, , c"
есть ли простой способ объединить набор строк с разделителем, который игнорирует пустые строки?
мне не обязательно использовать массивы или строки.Присоединяйтесь или что-нибудь еще. Мне просто нужны следующие преобразования:
("a", "b", "c") --> "a, b, c"
("a", null, "c") --> "a, c"
4 ответов:
VB.NET
String.Join(",", myArray.Where(Function(s) Not String.IsNullOrEmpty(s)))C#
String.Join(",", myArray.Where(s => !string.IsNullOrEmpty(s)))
чтобы сделать это в .NET 2.0 (без LINQ), например, для SQL-Server 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# (для тех, кто приземляется из google и не ищет 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);это предполагает, что символ backspace не встречается в ваших строках (обычно должно быть true, потому что вы не можете просто ввести этот символ с помощью клавиатуры).
также, если вы получаете значения из базы данных, то это еще проще, так как вы можете сделать это в 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
попробуйте следующее:
var finalString = String.Join(",", ExampleArrayOfObjects.Where(x => !String.IsNullOrEmpty(x.TestParameter)).Select(x => x.TestParameter));
Comments