C#/문자열

[C#]문자열 공백 제거하는 방법

DevStory 2022. 8. 15.

문자열 공백 제거

이번 포스팅은 C#의 문자열에서 공백을 제거하는 방법을 소개합니다.


Replace 메서드의 한계

가장 쉬운 방법은 Replace() 메서드를 사용하는 방법입니다.

 

Replace() 메서드의 첫 번째 매개변수로 띄어쓰기(" ")를 전달하고 두 번째 매개변수로 string.Empty를 전달합니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = "  AB CD EF GH";
    string ReplaceReturn = strValue.Replace(" ", string.Empty);

    Console.WriteLine("[공백 제거 전]");
    Console.WriteLine(strValue);

    Console.WriteLine("\n[공백 제거 후]");
    Console.WriteLine(ReplaceReturn);
  }
}

[실행 결과]

[공백 제거 전]
  AB CD EF GH

[공백 제거 후]
ABCDEFGH

Replace() 메서드를 사용하여 공백을 제거하는 방법은 몇 가지 문제점이 있습니다.

 

이스케이프 문자인 \t, \r, \n 그리고 ㄱ + 한자 1번 특수문자는 공백으로 처리하지 않는다는 것입니다.

따라서, 다음 예제처럼 문자열에 이스케이프 문자와 특수문자가 존재하는 경우 공백이 제거되지 않습니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = " AB\tCD\r\nEF\nGH";
    string ReplaceReturn = strValue.Replace(" ", "");

    Console.WriteLine("[공백 제거 전]");
    Console.WriteLine(strValue);

    Console.WriteLine("\n[공백 제거 후]");
    Console.WriteLine(ReplaceReturn);
  }
}

[실행 결과]

[공백 제거 전]
 AB    CD
EF
GH

[공백 제거 후]
 AB    CD
EF
GH

문자열 앞뒤 공백 문자 제거

문자열 앞뒤에 존재하는 공백을 제거하고 싶은 경우 Trim() 메서드를 사용합니다.

 

Trim() 메서드는 문자열 앞뒤에 존재하는 이스케이프 문자, 특수문자, 띄어쓰기가 제거된 새로운 문자열을 반환합니다.

class Program
{
  static void Main(string[] args)
  {
    // 1. 특수문자: ㄱ + 한자 1
    string strValue1 = " ABCD ";
    // 2. 이스케이프 문자: \t
    string strValue2 = "\tABCD\t";
    // 3. 이스케이프 문자: \r\n
    string strValue3 = "\r\nABCD\r\n";
    // 4. 스페이스바
    string strValue4 = "   ABCD  ";

    string TrimReturn1 = strValue1.Trim();
    string TrimReturn2 = strValue2.Trim();
    string TrimReturn3 = strValue3.Trim();
    string TrimReturn4 = strValue4.Trim();

    Console.WriteLine("[공백 제거 전]");
    Console.WriteLine("strValue1: " + strValue1);
    Console.WriteLine("strValue2: " + strValue2);
    Console.WriteLine("strValue3: " + strValue3);
    Console.WriteLine("strValue4: " + strValue4);

    Console.WriteLine("\n[공백 제거 후]");
    Console.WriteLine("TrimReturn1: " + TrimReturn1);
    Console.WriteLine("TrimReturn2: " + TrimReturn2);
    Console.WriteLine("TrimReturn3: " + TrimReturn3);
    Console.WriteLine("TrimReturn4: " + TrimReturn4);
  }
}

[실행 결과]

[공백 제거 전]
strValue1:  ABCD 
strValue2:      ABCD
strValue3:
ABCD

strValue4:    ABCD

[공백 제거 후]
TrimReturn1: ABCD
TrimReturn2: ABCD
TrimReturn3: ABCD
TrimReturn4: ABCD

문자열 앞에 존재하는 공백 문자 제거

문자열 앞에 존재하는 공백을 제거하고 싶은 경우 TrimeStart() 메서드를 사용합니다.

 

TrimeStart() 메서드는 문자열 앞에 존재하는 이스케이프 문자, 특수문자, 띄어쓰기가 제거된 새로운 문자열을 반환합니다.

class Program
{
  static void Main(string[] args)
  {
    // 1. 특수문자: ㄱ + 한자 1
    string strValue1 = " ABCD ";
    // 2. 이스케이프 문자: \t
    string strValue2 = "\tABCD\t";
    // 3. 이스케이프 문자: \r\n
    string strValue3 = "\r\nABCD\r\n";
    // 4. 스페이스바
    string strValue4 = "   ABCD  ";

    string TrimStartResult1 = strValue1.TrimStart();
    string TrimStartResult2 = strValue2.TrimStart();
    string TrimStartResult3 = strValue3.TrimStart();
    string TrimStartResult4 = strValue4.TrimStart();

    Console.WriteLine("[공백 제거 전]");
    Console.WriteLine("strValue1: " + strValue1);
    Console.WriteLine("strValue2: " + strValue2);
    Console.WriteLine("strValue3: " + strValue3);
    Console.WriteLine("strValue4: " + strValue4);

    Console.WriteLine("\n[공백 제거 후]");
    Console.WriteLine("TrimStartResult1: " + TrimStartResult1);
    Console.WriteLine("TrimStartResult2: " + TrimStartResult2);
    Console.WriteLine("TrimStartResult3: " + TrimStartResult3);
    Console.WriteLine("TrimStartResult4: " + TrimStartResult4);
  }
}

[실행 결과]

[공백 제거 전]
strValue1:  ABCD 
strValue2:      ABCD
strValue3:
ABCD

strValue4:    ABCD

[공백 제거 후]
TrimStartResult1: ABCD 
TrimStartResult2: ABCD
TrimStartResult3: ABCD

TrimStartResult4: ABCD

문자열 뒤에 존재하는 공백 문자 제거

문자열 뒤에 존재하는 공백을 제거하고 싶은 경우 TrimEnd() 메서드를 사용합니다.

 

TrimEnd() 메서드는 문자열 뒤에 존재하는 이스케이프 문자, 특수문자, 띄어쓰기가 제거된 새로운 문자열을 반환합니다.

class Program
{
  static void Main(string[] args)
  {
    // 1. 특수문자: ㄱ + 한자 1
    string strValue1 = "ABCD ";
    // 2. 이스케이프 문자: \t
    string strValue2 = "ABCD\t";
    // 3. 이스케이프 문자: \r\n
    string strValue3 = "ABCD\r\n";
    // 4. 스페이스바
    string strValue4 = "ABCD  ";

    string TrimEndResult1 = strValue1.TrimEnd();
    string TrimEndResult2 = strValue2.TrimEnd();
    string TrimEndResult3 = strValue3.TrimEnd();
    string TrimEndResult4 = strValue4.TrimEnd();

    Console.WriteLine("[공백 제거 전]");
    Console.WriteLine("strValue1: " + strValue1);
    Console.WriteLine("strValue2: " + strValue2);
    Console.WriteLine("strValue3: " + strValue3);
    Console.WriteLine("strValue4: " + strValue4);

    Console.WriteLine("\n[공백 제거 후]");
    Console.WriteLine("TrimEndResult1: " + TrimEndResult1);
    Console.WriteLine("TrimEndResult2: " + TrimEndResult2);
    Console.WriteLine("TrimEndResult3: " + TrimEndResult3);
    Console.WriteLine("TrimEndResult4: " + TrimEndResult4);
  }
}

[실행 결과]

[공백 제거 전]
strValue1: ABCD 
strValue2: ABCD
strValue3: ABCD

strValue4: ABCD

[공백 제거 후]
TrimEndResult1: ABCD
TrimEndResult2: ABCD
TrimEndResult3: ABCD
TrimEndResult4: ABCD

모든 공백 문자 제거

C#의 String 클래스에는 모든 공백 문자를 제거하는 기능이 없습니다.

 

그렇기 때문에 모든 공백 문자를 제거하기 위해서는 LINQ에서 제공하는 Where() 메서드를 사용할 필요가 있습니다.

 

LINQ에서 제공하는 메서드는 System.Linq 네임스페이스에 존재하므로 using 문을 추가합니다.

using System.Linq;

문자열은 문자 배열(Character Array)이므로 LINQ에서 제공하는 Where() 메서드 사용할 수 있습니다.

 

Where() 메서드에서 공백이 아닌 문자만 반환하는 람다식을 전달 후 공백이 아닌 문자를 문자열로 합치는 Concat() 메서드를 사용합니다.

 

Char 클래스의 IsWhitespace() 메서드는 매개변수로 전달된 문자가 공백인 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.

class Program
{
  public static string getRemoveWhiteSpaces(string str)
  {
    return string.Concat(str.Where(c => !Char.IsWhiteSpace(c)));
  }

  static void Main(string[] args)
  {
    string strValue = " A\tB\r\n C\t  D";
    string removeWhiteSpaceResult = getRemoveWhiteSpaces(strValue);

    Console.WriteLine("[공백 제거 전]");
    Console.WriteLine(strValue);

    Console.WriteLine("\n[공백 제거 후]");
    Console.WriteLine(removeWhiteSpaceResult);
  }
}

[실행 결과]

[공백 제거 전]
 A     B
 C        D

[공백 제거 후]
ABCD

정규식 사용

또 다른 방법으로 정규식을 사용할 수 있습니다.

 

Regex 클래스는 System.Text.regularExpressions 네임스페이스에 존재하므로 아래 using 문을 추가해야 합니다.

using System.Text.RegularExpressions;

 

다음 예제는 Regex 클래스의 Replace() 메서드를 사용하여 문자열에 공백이 존재하는 경우 공백이 제거된 문자열을 반환합니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = " A\tB\r\n C\t  D";
    string regexResult = Regex.Replace(strValue, @"\s", "");

    Console.WriteLine("[공백 제거 전]");
    Console.WriteLine(strValue);

    Console.WriteLine("\n[공백 제거 후]");
    Console.WriteLine(regexResult);
  }
}

[실행 결과]

[공백 제거 전]
 A     B
 C        D

[공백 제거 후]
ABCD
반응형

댓글