IT프로그래밍/C Sharp

C# Split 빈 문자열 제거 방법 : RemoveEmptyEntries와 TrimEntries 차이

MannizDev 2026. 8. 31.

쉼표로 입력받은 문자열을 Split으로 나눴는데 배열 중간에 빈 값이 생기거나, 항목 앞뒤 공백이 그대로 남는 경우가 있습니다. 특히 사과,바나나,, 포도 , ,복숭아,처럼 구분자가 연속되거나 공백만 있는 항목이 섞이면 RemoveEmptyEntries 하나만으로는 결과가 깔끔해지지 않습니다.

이 글에서는 빈 문자열을 제외하는 방법과 공백만 있는 항목까지 제거하는 방법을 실제 실행 결과로 비교합니다. 기존의 C# Split 기본 사용법이 구분자로 문자열을 나누는 기본 형태를 다뤘다면, 여기서는 빈 항목과 공백 정리에 초점을 맞춥니다.

C# Split 결과에서 빈 문자열을 제거하는 흐름을 설명하는 대표 이미지

테스트 환경과 원본 문자열

  • Windows 10 22H2
  • .NET SDK 8.0.130
  • C# 콘솔 프로젝트, 대상 프레임워크 net8.0
  • 실행 확인일 : 2026년 8월 31일

비교에 사용한 원본 문자열은 다음과 같습니다.

string source = " 사과,바나나,, 포도 ,   ,복숭아,";

이 문자열에는 세 가지 확인 지점이 있습니다.

  • 바나나 다음에는 쉼표가 두 번 이어져 길이가 0인 항목이 생깁니다.
  • 포도 앞뒤에는 공백이 있습니다.
  • 포도와 복숭아 사이에는 공백 세 칸만 들어 있는 항목이 있습니다.

옵션 없이 Split하면 빈 항목도 배열에 남습니다

먼저 기본 옵션인 StringSplitOptions.None으로 나눠 보겠습니다.

string[] items = source.Split(',', StringSplitOptions.None);

직접 실행한 결과는 배열 길이가 7이었습니다.

[None] count = 7
0: < 사과>
1: <바나나>
2: <>
3: < 포도 >
4: <   >
5: <복숭아>
6: <>

연속된 쉼표 사이와 문자열 마지막 쉼표 뒤에 빈 문자열이 만들어집니다. < >는 빈 문자열처럼 보여도 실제로는 공백 세 칸이 들어 있으므로 길이가 0이 아닙니다.

RemoveEmptyEntries만 사용했을 때 남는 값

길이가 0인 배열 요소를 제외하려면 StringSplitOptions.RemoveEmptyEntries를 지정합니다.

string[] items = source.Split(
    ',',
    StringSplitOptions.RemoveEmptyEntries);
[RemoveEmptyEntries] count = 5
0: < 사과>
1: <바나나>
2: < 포도 >
3: <   >
4: <복숭아>

배열 길이는 7에서 5로 줄었지만 < >가 남아 있습니다. RemoveEmptyEntries는 길이가 0인 문자열을 제외할 뿐, 항목의 공백을 먼저 지우지는 않기 때문입니다. 사용자 입력에 , ,처럼 공백만 있는 칸이 들어올 수 있다면 이 옵션 하나로는 부족합니다.

TrimEntries를 함께 사용하면 공백 항목도 제거됩니다

항목의 앞뒤 공백까지 정리하려면 두 옵션을 | 연산자로 함께 지정합니다.

string[] items = source.Split(
    ',',
    StringSplitOptions.RemoveEmptyEntries |
    StringSplitOptions.TrimEntries);
[RemoveEmptyEntries | TrimEntries] count = 4
0: <사과>
1: <바나나>
2: <포도>
3: <복숭아>

TrimEntries가 각 항목의 앞뒤 공백을 먼저 정리하고, RemoveEmptyEntries가 빈 결과를 제외합니다. 그래서 공백 세 칸뿐이던 항목도 최종 배열에서 빠집니다.

Microsoft 문서에서도 두 옵션을 함께 지정하면 공백 문자로만 이루어진 부분 문자열이 결과에서 제거된다고 설명합니다. TrimEntries는 .NET 5 이상에서 사용할 수 있으므로 오래된 .NET Framework 프로젝트에서는 각 항목에 Trim()을 적용하는 방식이 필요합니다.

쉼표와 세미콜론을 모두 구분자로 사용하기

입력 문자열에 쉼표와 세미콜론이 섞여 있다면 char[]에 구분자를 모아서 전달할 수 있습니다.

string mixed = "C#; Java,Python;; SQL";
char[] separators = { ',', ';' };

string[] languages = mixed.Split(
    separators,
    StringSplitOptions.RemoveEmptyEntries |
    StringSplitOptions.TrimEntries);
[여러 구분자] count = 4
0: <C#>
1: <Java>
2: <Python>
3: <SQL>

여기서 배열에 넣은 ','와 ';'는 각각 독립된 한 글자 구분자입니다. "--"나 "[stop]"처럼 여러 글자로 된 구분자가 필요하면 string[] 오버로드를 사용해야 합니다.

string source = "ONE[stop][stop]TWO[stop] THREE";
string[] separators = { "[stop]" };

string[] values = source.Split(
    separators,
    StringSplitOptions.RemoveEmptyEntries |
    StringSplitOptions.TrimEntries);

전체 실행 코드

아래 코드는 네 가지 결과를 한 번에 비교합니다.

static void Print(string title, string[] values)
{
    Console.WriteLine($"[{title}] count = {values.Length}");

    for (int i = 0; i < values.Length; i++)
    {
        Console.WriteLine($"{i}: <{values[i]}>");
    }

    Console.WriteLine();
}

string source = " 사과,바나나,, 포도 ,   ,복숭아,";

Print(
    "None",
    source.Split(',', StringSplitOptions.None));

Print(
    "RemoveEmptyEntries",
    source.Split(',', StringSplitOptions.RemoveEmptyEntries));

Print(
    "RemoveEmptyEntries | TrimEntries",
    source.Split(
        ',',
        StringSplitOptions.RemoveEmptyEntries |
        StringSplitOptions.TrimEntries));

string mixed = "C#; Java,Python;; SQL";
char[] separators = { ',', ';' };

Print(
    "여러 구분자",
    mixed.Split(
        separators,
        StringSplitOptions.RemoveEmptyEntries |
        StringSplitOptions.TrimEntries));

실행할 때 자주 헷갈리는 부분

TrimEntries에서 컴파일 오류가 나는 경우

'StringSplitOptions' does not contain a definition for 'TrimEntries' 오류가 난다면 프로젝트의 대상 프레임워크를 먼저 확인합니다. TrimEntries는 .NET 5 이상에서 제공되며 .NET Framework 4.x에는 없습니다.

오래된 프로젝트에서는 다음처럼 나눈 뒤 Trim()과 조건문으로 처리할 수 있습니다.

string[] items = source
    .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(item => item.Trim())
    .Where(item => item.Length > 0)
    .ToArray();

CSV 파일은 단순 Split으로 처리하지 않기

홍길동,"서울, 강남",30처럼 따옴표 안에 쉼표가 들어가는 CSV는 Split(',')만 사용하면 열이 잘못 나뉩니다. 이 글의 코드는 단순한 구분 문자열 입력에 맞는 방법입니다. 실제 CSV 파일은 따옴표, 줄바꿈, 이스케이프 규칙을 처리하는 CSV 파서를 사용하는 편이 안전합니다.

어떤 옵션을 선택하면 되는가

빈 문자열도 위치 정보로 사용해야 한다면 None을 유지합니다. 예를 들어 A,,C의 두 번째 칸이 비어 있다는 사실이 중요할 수 있습니다.

반대로 태그, 기술 목록, 간단한 입력값처럼 실제 내용이 있는 항목만 필요하다면 RemoveEmptyEntries | TrimEntries 조합이 실수하기 어렵습니다. 나눈 문자열을 다시 하나로 합쳐야 할 때는 C# String.Join으로 배열과 List 문자열 합치기를 이어서 확인할 수 있습니다. 공백 제거 자체가 목적이라면 C# Trim, TrimStart, TrimEnd 차이도 함께 보면 좋습니다.

참고 문서

댓글

💲 추천 글