특정 문자열 제거하는 방법
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
문자열 배열을 문자열로 변환하는 방법은 아래 포스팅에서 확인할 수 있습니다.
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
'C# > 문자열' 카테고리의 다른 글
[C#]문자열에서 특정 문자열로 변경하는 방법 (0) | 2022.08.16 |
---|---|
[C#]문자열 공백 제거하는 방법 (0) | 2022.08.15 |
[C#]문자열 배열을 문자열로 변환(String Array to String) (0) | 2022.08.15 |
[C#]문자열 비교 방법 (0) | 2021.10.04 |
[C#]문자열을 정수로 변환 방법(String to Int) (0) | 2021.09.25 |
댓글