C#/문자열

[C#]문자열 비교 방법

DevStory 2021. 10. 4.

이번 포스팅에서는 C#에서 두 문자열을 비교하는 방법을 소개합니다.

 


Equals() 함수

Equlas() 함수는 두 개의 문자열 객체가 동일한지 확인하는데 사용됩니다. 불리언 값을 반환하며 두 문자열이 같으면 True를 반환하며 그렇지 않으면 False를 반환합니다.

 

다음은 Equals() 함수 사용 예제입니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("string.Equals(\"ABCDEE\", \"ABCDDE\"): " + string.Equals("ABCDEE", "ABCDDE"));
        Console.WriteLine("string.Equals(\"ABC\", \"abc\"): " + string.Equals("ABC", "abc"));
        Console.WriteLine("string.Equals(\"ABC\", \"ABC\"): " + string.Equals("ABC", "ABC"));
    }
}

실행 결과

 

Equals() 함수는 대소문자를 구분하며, 다음과 같이 문자열 객체에서 Equlas() 함수를 호출할 수 있습니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("\"ABCDEE\".Equals(\"ABCDDE\"): " + "ABCDEE".Equals("ABCDDE"));
        Console.WriteLine("\"ABC\".Equals(\"abc\"): " + "ABC".Equals("abc"));
        Console.WriteLine("\"ABC\".Equals(\"ABC\"): " + "ABC".Equals("ABC"));
    }
}

실행 결과

문자열 객체에서 Equals() 함수를 호출하는 경우 주의사항으로 Equals() 함수를 호출하는 문자열이 null인 경우 NullReferenceException 예외가 발생합니다.

 

다음은 문자열 객체가 null인데, Equals() 함수를 호출하여 NullReferenceException 예외가 발생하는 경우입니다.

class Program
{
    static void Main(string[] args)
    {
        string strValue = null;
        Console.WriteLine("strValue.Equals(\"ABCDDE\"): " + strValue.Equals("ABCDDE"));
    }
}

실행 결과


== 연산자

== 연산자는 두 개의 문자열 객체가 동일한지 확인하는데 사용됩니다. 불리언 값을 반환하며 두 문자열이 같으면 True를 반환하며 그렇지 않으면 False를 반환합니다.

 

그리고 비교하는 문자열에 null이 존재하더라도 예외가 발생하지 않습니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("\"ABCDEE\" == \"ABCDDE\": " + ("ABCDEE" == "ABCDDE"));
        Console.WriteLine("\"ABC\" == \"abc\": " + ("ABC" == "abc"));
        Console.WriteLine("\"ABC\" == \"ABC\": " + ("ABC" == "ABC"));
        Console.WriteLine("\"ABC\" == null: " + ("ABC" == null));
    }
}

실행 결과


Compare() 함수

Compare() 함수는 두 문자열을 전달하여 ASCII 값 측면에서 값을 비교합니다. Compare() 함수는 int형 값을 반환하며, 반환되는 값은 다음과 같습니다.

  • 두 문자열이 동일하면 0을 반환합니다.
  • 첫 번째 문자열이 두 번째 문자열보다 크면 1 또는 0보다 큰 값을 반환합니다.
  • 첫 번째 문자열이 두 번째 문자열보다 작으면 -1 또는 0보다 작은 값을 반환합니다.
class Program
{
    static void Main(string[] args)
    {
        // 대소문자를 구분합니다.
        Console.WriteLine("string.Compare(\"A\", \"a\"): " + string.Compare("A", "a"));
        
        // A는 아스키코드로 65 B는 66입니다. B가 더 큽니다.
        Console.WriteLine("string.Compare(\"A\", \"B\"): " + string.Compare("A", "B"));
        Console.WriteLine("string.Compare(\"B\", \"A\"): " + string.Compare("B", "A"));
        
        // 동일한 문자열입니다.
        Console.WriteLine("string.Compare(\"C\", \"C\"): " + string.Compare("C", "C"));
    }
}

실행 결과

 

다음은 단일 문자열이 아닌 문자열을 비교합니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("string.Compare(\"ABB\", \"ABA\"): " + string.Compare("ABB", "ABA"));
    }
}

실행 결과

두 문자열은 "AB"까지는 동일하지만, 세 번째 위치의 문자열은 다릅니다. "B"가 "A"보다 크므로 첫 번째 문자열이 두 번째 문자열보다 큽니다.


CompareTo() 함수

CompareTo() 함수는 두 문자열의 정렬 순서로 비교합니다. CompareTo() 함수는 int형 값을 반환하며, 반환되는 값은 다음과 같습니다.

  • 두 문자열의 정렬 순서가 동일하면 0을 반환합니다.
  • 첫 번째 문자열이 두 번째 문자열보다 빠른 경우 0보다 큰 값을 반환합니다.
  • 첫 번째 문자열이 두 번째 문자열보다 느린 경우 0보다 작은 값을 반환합니다.
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("\"ABCDEE\".CompareTo(\"ABCDDE\"): " + "ABCDEE".CompareTo("ABCDDE"));
        Console.WriteLine("\"ABC\".CompareTo(\"abc\"): " + "ABC".CompareTo("abc"));
        Console.WriteLine("\"ABC\".CompareTo(\"ABC\"): " + "ABC".CompareTo("ABC"));
    }
}

실행 결과


대소문자를 무시하여 비교

첫 번째 방법은 두 문자열을 ToLower() 함수를 호출하여 소문자로 변환 후 비교하거나 ToUpper() 함수를 호출하여 대문자로 변환 후 비교합니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("\"ABCDE\" == \"abcde\": " + ("ABCDE".ToLower() == "abcde".ToLower()));
        Console.WriteLine("\"ABC\" == \"abc\": " + ("ABC".ToLower() == "abc".ToLower()));

        Console.WriteLine("\"ABCDE\" == \"abcde\": " + ("ABCDE".ToUpper() == "abcde".ToUpper()));
        Console.WriteLine("\"ABC\" == \"abc\": " + ("ABC".ToUpper() == "abc".ToUpper()));
    }
}

실행 결과

 

두 번째 방법은 Equals() 함수에서 StringComparison.OrdinalIgnoreCase를 매개변수로 사용합니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("\"AAA\".Equals(\"aaa\"): " + "AAA".Equals("aaa", StringComparison.OrdinalIgnoreCase));
        Console.WriteLine("\"ABC\".Equals(\"abc\"): " + "ABC".Equals("abc", StringComparison.OrdinalIgnoreCase));

        Console.WriteLine("string.Equals(\"AAA\", \"abc\"): " + string.Equals("AAA", "aaa", StringComparison.OrdinalIgnoreCase));
        Console.WriteLine("string.Equals(\"ABC\", \"abc\"): " + string.Equals("ABC", "abc", StringComparison.OrdinalIgnoreCase));
    }
}

실행 결과

 

세 번째 방법은 Compare() 함수의 세 번째 매개변수로 true를 전달합니다. 세 번째 매개변수는 대소문자 무시 여부입니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("string.Compare(\"AAA\", \"aaa\"): " + string.Compare("AAA", "aaa", true));
        Console.WriteLine("string.Compare(\"ABC\", \"abc\"): " + string.Compare("ABC", "abc", true));
    }
}

실행 결과

반응형

댓글