C#/문자열

[C#]특정 문자열 제거하는 방법

DevStory 2022. 8. 15.

특정 문자열 제거하는 방법

C#에서 문자열은 변경할 수 없습니다.

 

즉, 다음과 같이 문자열 변수를 생성하면 문자열 변수는 Stack에 존재하지만, 문자열 값은 Heap에 존재하므로 Heap에 존재하는 문자열 값을 변경할 수 없습니다.

 

Stack에 존재하는 문자열 변수는 Heap에 존재하는 문자열 주소를 참조합니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = "AB_CD_EF_GH";
  }
}

[메모리 공간]

 

따라서, 특정 문자열을 제거하기 위해서는 특정 문자열이 제거된 새로운 문자열을 Heap에 생성해야 합니다.

 

이번 포스팅은 C#에서 특정 문자열을 제거하는 몇 가지 방법을 소개합니다.


Replace 메서드

문자열에 포함된 특정 문자열을 모두 변경하고 싶다면, string 클래스의 Replace() 메서드를 사용합니다.

 

Replace() 메서드는 특정 문자열이 변경된 새로운 문자열을 반환합니다.

 

Replace() 메서드의 첫 번째 매개변수로 특정 문자열을 전달하고 두 번째 매개변수로 변경되어야 하는 문자열을 전달합니다.

 

다음 예제는 문자열 "_"를 빈 값으로 변경합니다. 

class Program
{
  static void Main(string[] args)
  {
    string strValue = "AB_CD_EF_GH";

    string ReplaceResult = strValue.Replace("_", "");

    Console.WriteLine("기존 문자열: " + strValue);
    Console.WriteLine("변경된 문자열: " + ReplaceResult);
  }
}

[실행 결과]

기존 문자열: AB_CD_EF_GH
변경된 문자열: ABCDEFGH

특정 문자열을 빈 값으로 변경함으로써 특정 문자열을 제거할 수 있습니다.


Split 메서드

두 번째 방법으로 Split() 메서드를 사용할 수 있습니다.

 

Split() 메서드는 특정 문자열을 기준으로 분리된 문자열 배열을 반환합니다.

 

분리된 문자열 배열을 문자열로 변환함으로써 특정 문자열을 제거할 수 있습니다.

 

다음 예제는 문자열 "_"를 빈 값으로 변경합니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = "AB_CD_EF_GH";
    string[] SplitResult = strValue.Split("_");

    StringBuilder stringBuilder = new StringBuilder();

    for (int i = 0; i < SplitResult.Length; i++)
    {
      stringBuilder.Append(SplitResult[i]);
    }

    string strArrayToString = stringBuilder.ToString();

    Console.WriteLine("기존 문자열: " + strValue);
    Console.WriteLine("변경된 문자열: " + strArrayToString);
  }
}

[실행 결과]

기존 문자열: AB_CD_EF_GH
변경된 문자열: ABCDEFGH

문자열 배열을 문자열로 변환하는 방법은 아래 포스팅에서 확인할 수 있습니다.

 

[C#]문자열 배열을 문자열로 변환(String Array to String)

문자열 배열을 문자열로 변환 이번 포스팅은 C#에서 문자열 배열을 문자열로 변환하는 방법을 소개합니다. Join 메서드 첫 번째 방법은 string 클래스의 Join() 메서드를 사용하는 방법입니다. Join()

developer-talk.tistory.com


Remove 메서드

또 다른 방법으로 Remove() 메서드를 사용할 수 있습니다.

 

Remove() 메서드는 오버로드된 두 가지 버전이 존재합니다.

public string Remove (int startIndex, int count);

시작 위치(startIndex)부터 지정된 수(count)가 제거된 문자열을 반환합니다.

 

public string Remove (int startIndex);

시작 위치(startIndex)부터 문자열의 마지막 위치까지 제거된 문자열을 반환합니다.

 

Remove() 메서드는 Replace(), Split() 메서드와 달리 특정 문자열을 모두 제거할 수 없으며, 맨 앞에 위치한 문자열 또는 맨 뒤에 위치한 문자열을 제거할 수 있습니다.


맨 앞의 문자열 제거

맨 앞에 위치한 문자열을 제거하기 위해서는 특정 문자열의 위치를 IndexOf() 메서드로 찾습니다.

 

Remove() 메서드의 첫 번째 매개변수로 특정 문자열의 위치를 전달하고 두 번째 매개변수로 특정 문자열의 길이를 전달합니다.

 

다음 예제는 문자열 "_" 위치를 앞에서부터 찾은 뒤 빈 값으로 변경합니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = "AB_CD_EF_GH";
    string subStringValue = "_";

    int firstFindIndex = strValue.IndexOf(subStringValue);

    string RemoveResult = strValue.Remove(firstFindIndex, subStringValue.Length);

    Console.WriteLine("기존 문자열: " + strValue);
    Console.WriteLine("변경된 문자열: " + RemoveResult);
  }
}

[실행 결과]

기존 문자열: AB_CD_EF_GH
변경된 문자열: ABCD_EF_GH

맨 뒤의 문자열 제거

맨 뒤에 위치한 문자열을 제거하기 위해서는 특정 문자열의 위치를 LastIndexOf() 메서드로 찾습니다.

 

Remove() 메서드의 첫 번째 매개변수로 특정 문자열의 위치를 전달하고 두 번째 매개변수로 특정 문자열의 길이를 전달합니다.

 

다음 예제는 문자열 "_" 위치를 뒤에서부터 찾은 뒤 빈 값으로 변경합니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = "AB_CD_EF_GH";
    string subStringValue = "_";

    int firstFindIndex = strValue.IndexOf(subStringValue);

    string RemoveResult = strValue.Remove(firstFindIndex, subStringValue.Length);

    Console.WriteLine("기존 문자열: " + strValue);
    Console.WriteLine("변경된 문자열: " + RemoveResult);
  }
}

[실행 결과]

기존 문자열: AB_CD_EF_GH
변경된 문자열: AB_CD_EFGH

정규식 사용

마지막 방법으로 정규식을 사용하는 방법입니다.

 

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

using System.Text.RegularExpressions;

정규식을 사용하면 제거하고 싶은 문자를 여러 개 지정할 수 있습니다.

 

다음 예제는 특수 문자인 @, #, $를 빈 값으로 변경합니다.

class Program
{
  static void Main(string[] args)
  {
    string strValue = "AB@CD#EF$GH";
    string subStringList = "[@#$]";
    string RegexResult = Regex.Replace(strValue, subStringList, ""); 

    Console.WriteLine("기존 문자열: " + strValue);
    Console.WriteLine("변경된 문자열: " + RegexResult);
  }
}

[실행 결과]

기존 문자열: AB@CD#EF$GH
변경된 문자열: ABCDEFGH
반응형

댓글