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

C#에서 문자열의 문자를 서로 교환하는 방법

C#에서 문자열에 포함된 특정 문자들을 서로 맞바꾸고 싶다면 LINQ의 Select 메서드를 활용하는 것이 가장 간단하고 안전한 방법입니다.

문자 교환의 기본 원리

먼저 다음과 같은 문자열이 있다고 가정해 보겠습니다.

string str = "PQRQP";

이 문자열에서 모든 P는 Q로, Q는 P로 교환하려면 Select 메서드와 삼항 연산자(조건 연산자)를 함께 사용하면 됩니다.

str = new string(str.Select(a => a == 'P' ? 'Q' : (a == 'Q' ? 'P' : a)).ToArray());

Select 메서드는 문자열을 한 글자씩 순회하면서, 현재 문자가 'P'이면 'Q'로, 'Q'이면 'P'로 바꾸고 나머지 문자는 그대로 유지합니다. 변환된 결과를 ToArray()로 배열로 만든 뒤 새로운 문자열로 생성하면 교환이 완료됩니다.

참고로 C#의 문자열은 불변(immutable)이므로 기존 문자열을 직접 수정할 수 없습니다. 따라서 반드시 위 코드처럼 새 문자열을 만들어 변수에 다시 할당해야 합니다.

전체 예제 코드

using System;
using System.Linq;

public class Program {
    public static void Main() {

        string str = "PQRQP";

        var res = str.Select(a => a == 'P' ? 'Q' : (a == 'Q' ? 'P' : a)).ToArray();
        str = new String(res);

        Console.WriteLine(str);
    }
}

실행 결과

QPRPQ

Replace를 연달아 사용하면 안 되는 이유

str.Replace('P', 'Q').Replace('Q', 'P')처럼 Replace 메서드를 두 번 연결하면 의도대로 동작하지 않습니다. 첫 번째 단계에서 모든 P가 Q로 바뀌기 때문에, 두 번째 단계에서는 원래부터 Q였던 문자까지 함께 P로 되돌아가 버립니다. 각 문자를 개별적으로 조건 판단할 수 있는 Select 방식이 이러한 문제를 깔끔하게 해결해 줍니다.