首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >忽略空字符串的String.Join方法?

忽略空字符串的String.Join方法?
EN

Stack Overflow用户
提问于 2013-05-02 04:32:32
回答 2查看 84.6K关注 0票数 113

VB.NET方法String.Join(separator, stringArray)类似于PHP的implode,但是数组中的任何空元素都被替换为空字符串,因此c:

代码语言:javascript
复制
Dim myArray() as String = { "a", null, "c" }
Console.WriteLine(String.Join(", ", myArray));
// Prints "a, , c"

有没有一种简单的方法可以将一组字符串与忽略空字符串的分隔符连接起来?

我不一定需要使用数组或String.Join或其他任何东西。我只需要以下转换:

代码语言:javascript
复制
("a", "b", "c") --> "a, b, c"
("a", null, "c") --> "a, c"
EN

回答 2

Stack Overflow用户

发布于 2016-09-14 16:45:21

要在SQL2.0 (no LINQ)中做到这一点,例如,对于.NET - ReportingServices,而不必为其编写函数:

VB.NET

代码语言:javascript
复制
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的用户)

代码语言:javascript
复制
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:

代码语言:javascript
复制
SELECT 
    concat_ws(' / '
        , NULLIF(searchTerm1, '')
        , NULLIF(searchTerm2, '')
        , NULLIF(searchTerm3, '')
        , NULLIF(searchTerm4, '')
    ) AS RPT_SearchTerms; 

即使使用光荣的MS-SQL-Server,这也是可能的(PS:这是讽刺):

代码语言:javascript
复制
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 
票数 3
EN

Stack Overflow用户

发布于 2018-08-14 20:24:41

尝试以下操作:

代码语言:javascript
复制
var finalString = String.Join(",", ExampleArrayOfObjects.Where(x => !String.IsNullOrEmpty(x.TestParameter)).Select(x => x.TestParameter));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16325995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档