Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 여러 개의 공백을 하나의 공백으로 바꾸는 3가지 방법

C#에서 문자열에 포함된 여러 개의 연속된 공백을 하나의 공백으로 바꾸는 방법은 여러 가지가 있습니다. 대표적으로 String.Replace, String.Join, Regex.Replace 세 가지 방법을 활용할 수 있습니다.

1. String.Replace

String.Replace 메서드는 현재 문자열에서 지정한 유니코드 문자 또는 문자열이 나타나는 모든 부분을 다른 문자나 문자열로 교체한 새 문자열을 반환합니다. 대소문자 구분 여부와 문화권 정보를 함께 지정할 수 있는 Replace(String, String, Boolean, CultureInfo) 오버로드도 제공됩니다.

다만 String.Replace는 정확히 일치하는 문자열만 교체하기 때문에, 연속된 공백의 개수를 미리 알 수 없는 상황에는 적합하지 않습니다.

2. String.Join

String.Join 메서드는 지정된 배열의 요소나 컬렉션의 멤버들을 지정한 구분 기호로 연결하여 하나의 문자열로 만듭니다. Split 메서드와 함께 사용하면 연속된 공백을 효과적으로 정리할 수 있습니다.

3. Regex.Replace

Regex.Replace 메서드는 지정된 입력 문자열에서 정규식 패턴과 일치하는 부분을 찾아 지정된 대체 문자열로 바꿉니다. 정규식 패턴 \s+를 사용하면 탭이나 줄바꿈을 포함한 하나 이상의 연속된 공백 문자를 한 번에 처리할 수 있어 가장 널리 사용되는 방식입니다.

Regex를 활용한 예제

using System;
using System.Text.RegularExpressions;

namespace DemoApplication{
   class Program{
      public static void Main(){
         string stringWithMultipleSpaces = "Hello World. Hi    Everyone";
         Console.WriteLine($"공백이 여러 개인 문자열: {stringWithMultipleSpaces}");
         string stringWithSingleSpace = Regex.Replace(stringWithMultipleSpaces, @"\s+", " ");
         Console.WriteLine($"공백이 하나인 문자열: {stringWithSingleSpace}");
         Console.ReadLine();
      }
   }
}

실행 결과

공백이 여러 개인 문자열: Hello World. Hi    Everyone
공백이 하나인 문자열: Hello World. Hi Everyone

위 예제에서 Regex.Replace는 \s+ 패턴으로 연속된 공백을 식별한 뒤, 이를 단일 공백으로 교체했습니다.

string.Join을 활용한 예제

using System;

namespace DemoApplication{
   class Program{
      public static void Main(){
         string stringWithMultipleSpaces = "Hello World. Hi    Everyone";
         Console.WriteLine($"공백이 여러 개인 문자열: {stringWithMultipleSpaces}");
         string stringWithSingleSpace = string.Join(" ",
            stringWithMultipleSpaces.Split(new char[] { ' ' },
            StringSplitOptions.RemoveEmptyEntries));
         Console.WriteLine($"공백이 하나인 문자열: {stringWithSingleSpace}");
         Console.ReadLine();
      }
   }
}

실행 결과

공백이 여러 개인 문자열: Hello World. Hi    Everyone
공백이 하나인 문자열: Hello World. Hi Everyone

위 예제에서는 Split 메서드로 문자열을 공백 기준으로 분리하면서 StringSplitOptions.RemoveEmptyEntries 옵션을 사용해 빈 항목(연속된 공백으로 인해 생기는 빈 문자열)을 제거했습니다. 그런 다음 Join 메서드로 분리된 배열을 단일 공백을 구분 기호로 하여 다시 하나의 문자열로 합쳤습니다.

마무리

간결하고 강력한 처리가 필요하다면 정규식을 사용하는 Regex.Replace 방식이 가장 일반적이며, Split과 Join의 조합을 선호하는 경우 string.Join + Split 방식도 좋은 선택입니다. 대용량 텍스트를 반복적으로 처리해야 한다면, 정규식 객체를 미리 컴파일하여 재사용하거나 StringBuilder를 활용하는 것이 성능 면에서 유리합니다.