developer tip

빈 문자열을 무시하는 String.Join 메서드?

optionbox 2020. 9. 9. 07:56
반응형

빈 문자열을 무시하는 String.Join 메서드?


VB.NET 메서드 String.Join(separator, stringArray)는 PHP의 implode와 유사하지만 배열의 모든 null 요소는 빈 문자열로 대체되므로 c :

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"

VB.NET

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

씨#

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


C # ==> String.Join(",", arr.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);

이것은 문자 백 스페이스가 문자열에서 발생하지 않는다고 가정합니다 (이 문자를 키보드로 간단히 입력 할 수 없기 때문에 일반적으로 true 여야합니다).

또한 데이터베이스에서 값을 가져 오면 SQL에서 직접 수행 할 수 있으므로 훨씬 간단합니다.

PostgreSQL 및 MySQL :

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

그리고 영광스러운 MS-SQL-Server로도 가능합니다 (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));

이것은 VB.NET에서 잘 작동합니다.

Join(*yourArray*.Where(Function(s) Not String.IsNullOrEmpty(s)).ToArray(), *yourDelimiter*)

참고 URL : https://stackoverflow.com/questions/16325995/string-join-method-that-ignores-empty-strings

반응형