HOWTO · Csharp

C#의 문자열에서 문자 제거

C# 문자열에서 문자 하나나 선택한 문자 집합을 제거하는 방법을 알아봅니다. string.Replace(), string.Split()과 string.Join(), Regex.Replace(), LINQ를 사용하는 방법을 살펴봅니다.

이 페이지의 내용

C# 문자열에서 특정 문자 하나를 제거하려면 해당 문자와 string.Empty를 인수로 string.Replace()를 호출합니다. 선택한 문자가 여러 개라면 각 문자마다 같은 치환을 반복합니다. 문자열은 변경할 수 없으므로 호출할 때마다 새 문자열이 반환됩니다. 변경 내용을 유지하려면 반환값을 변수에 할당하세요. 문자가 구분자라면 string.Split()과 string.Join()을, 문자 패턴이라면 Regex.Replace()를, 어떤 문자를 남길지 조건으로 정한다면 LINQ를 사용하세요. 공백을 제거하는 방법은 C# 문자열에서 공백을 제거하는 방법을 참조하세요.

string.Replace()로 문자 제거

string.Replace()는 지정한 문자나 부분 문자열이 나타나는 모든 위치를 치환합니다. 문자를 string.Empty로 바꾸면 해당 문자가 모두 제거됩니다. 다음 예제는 선택한 문자 집합의 각 항목에 이 작업을 적용합니다. 각 호출의 반환값이 다음 호출의 입력으로 사용됩니다.

이 예제를 실행하세요:

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

using System;

class Program
{
    static void Main()
    {
        string text = "Something @to ,Write.;';";
        char[] charactersToRemove = { '@', ',', '.', ';', '\'' };

        foreach (char character in charactersToRemove)
        {
            text = text.Replace(character.ToString(), string.Empty);
        }

        Console.WriteLine(text);
    }
}
Something to Write

문자 하나만 제거할 때는 text = text.Replace("@", string.Empty);처럼 한 번 호출하면 됩니다. 이 메서드는 첫 번째 일치 항목만이 아니라 모든 일치 항목을 제거합니다. 선택한 문자 집합이 크면 반복 호출마다 문자열을 다시 살펴보고 중간 문자열을 만듭니다. 규칙을 더 명확하게 표현할 수 있다면 문자 필터나 정규식을 고려하세요.

string.Split()과 string.Join()으로 구분자 제거

string.Split()은 지정한 각 문자를 구분자로 취급해 구분자 사이의 부분 문자열을 반환합니다. string.Join()은 사용자가 지정한 구분자로 그 부분 문자열을 연결합니다. 구분자를 빈 문자열로 지정하면 남은 부분이 바로 이어져 구분자가 제거됩니다. 같은 작업을 표현하는 또 다른 방법이며, string.Replace()보다 본질적으로 더 나은 방법은 아닙니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

using System;

class Program
{
    static void Main()
    {
        string text = "Something @to ,Write.;';";
        char[] delimiters = { '@', ',', '.', ';', '\'' };
        string result = string.Join(string.Empty,
            text.Split(delimiters, StringSplitOptions.RemoveEmptyEntries));

        Console.WriteLine(result);
    }
}
Something to Write

StringSplitOptions.RemoveEmptyEntries는 구분자가 연속해서 있거나 문자열의 시작 또는 끝에 있을 때 생길 수 있는 빈 조각을 제거합니다. 예제의 입력에서는 분할한 조각을 연결한 결과가 치환 반복문의 결과와 같은 텍스트가 됩니다. 문자열을 여러 조각으로 나누는 것 자체가 유용할 때 이 방법을 사용하세요. 단순히 문자를 삭제하려는 경우에는 string.Replace()가 더 직접적입니다.

Regex.Replace()로 문자 제거

Regex.Replace()는 정규식 패턴과 일치하는 모든 부분 문자열을 치환합니다. [@,.;']와 같은 문자 클래스는 나열된 문자 중 하나와 일치하므로, 일치 항목을 string.Empty로 치환하면 선택한 문자 집합이 제거됩니다. . 같은 문자는 문자 클래스 밖에서 정규식의 특별한 의미를 갖지만, 이 문자 클래스 안에서는 마침표 자체를 뜻합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string text = "Something @to ,Write.;';";
        string result = Regex.Replace(text, "[@,.;']", string.Empty);

        Console.WriteLine(result);
    }
}
Something to Write

짧은 고정 목록이 아니라 문자 범위나 문자 범주 같은 패턴에 따라 제거할 때 정규식이 유용합니다. 문자 클래스 밖에서 정규식 메타 문자를 문자 그대로 일치시켜야 한다면 이스케이프하세요. 고정된 문자 목록이라면 string.Replace()나 string.Split()을 사용해 대상 문자를 더 분명하게 나타낼 수 있습니다.

LINQ로 문자 필터링

LINQ를 사용하면 조건을 만족하는 문자로 새 문자열을 만들 수 있습니다. 이 예제는 공백, 문자, 숫자를 남기므로 문장 부호가 제거됩니다. 이는 문자 속성에 따른 필터링이지 호출자가 임의로 선택한 문자 집합을 제거하는 방법은 아닙니다. 규칙에 맞는 문자는 문자와 공백을 포함해 모두 남습니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        string text = "Something @to ,Write.;';";
        string result = new string(text
            .Where(character => char.IsWhiteSpace(character)
                || char.IsLetterOrDigit(character))
            .ToArray());

        Console.WriteLine(result);
    }
}
Something to Write

남길 문자의 조건으로 요구사항을 가장 명확하게 표현할 수 있다면 LINQ를 사용하세요. 다른 문자 집합이 필요하면 char.IsWhiteSpace와 char.IsLetterOrDigit 대신 원하는 정책에 맞는 조건식을 사용하세요. 호출자가 지정한 정확한 문자 목록을 처리하려면 치환 반복문이나 이에 해당하는 포함 여부 검사를 사용하세요.