C# - 문자열이 같은지 비교 (Compare, Equals)

두개의 문자열이 같은지 비교하는 방법을 소개합니다.

1. Equals()를 이용한 방법

str1.Equals(str2)는 str1과 str2가 같을 때 true를 리턴합니다. 기본적으로 대소문자를 구분(case sensitive)하여 비교합니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            string str1 = "Hello, C#";
            string str2 = "Hello, Java";
            string str3 = "Hello, C#";
            string str4 = "Hello, c#";

            bool result = str1.Equals(str2);
            Console.WriteLine("str1 == str2 ? " + result);

            result = str1.Equals(str3);
            Console.WriteLine("str1 == str3 ? " + result);

            result = str1.Equals(str4);
            Console.WriteLine("str1 == str4 ? " + result);
        }
    }
}

Output:

str1 == str2 ? False
str1 == str3 ? True
str1 == str4 ? False

1.1 대소문자 구분 없이 비교(Ignore case)

대소문자 구분 없이 비교하려면 Equals()의 두번째 인자로 StringComparison.OrdinalIgnoreCase를 추가하면 됩니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            string str1 = "Hello, C#";
            string str2 = "Hello, Java";
            string str3 = "Hello, C#";
            string str4 = "Hello, c#";

            bool result = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
            Console.WriteLine("str1 == str2 ? " + result);

            result = str1.Equals(str3, StringComparison.OrdinalIgnoreCase);
            Console.WriteLine("str1 == str3 ? " + result);

            result = str1.Equals(str4, StringComparison.OrdinalIgnoreCase);
            Console.WriteLine("str1 == str4 ? " + result);
        }
    }
}

Output:

str1 == str2 ? False
str1 == str3 ? True
str1 == str4 ? True

2. string.Compare()를 이용한 방법

Compare(str1, str2)는 str1과 str2를 비교하며 아래와 같은 결과를 리턴합니다.

  • 0: str1과 str2가 같음
  • 음수 : 같지 않음, 정렬 순서에서 str1가 str2보다 앞에 있음
  • 양수 : 같지 않음, 정렬 순서에서 str1가 str2보다 뒤에 있음

따라서, 아래와 같이 리턴 값이 0이면 두개의 문자열이 같다고 볼 수 있습니다. 이 함수도 기본적으로 대소문자를 구분하여 비교합니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            string str1 = "Hello, C#";
            string str2 = "Hello, Java";
            string str3 = "Hello, C#";
            string str4 = "Hello, c#";

            bool result = string.Compare(str1, str2) == 0;
            Console.WriteLine("str1 == str2 ? " + result);

            result = string.Compare(str1, str3) == 0;
            Console.WriteLine("str1 == str3 ? " + result);

            result = string.Compare(str1, str4) == 0;
            Console.WriteLine("str1 == str4 ? " + result);
        }
    }
}

Output:

str1 == str2 ? False
str1 == str3 ? True
str1 == str4 ? False

2.1 대소문자 구분 없이 비교(Ignore case)

Compare()의 3번째 인자로 StringComparison.OrdinalIgnoreCase를 전달하면 대소문자 구분 없이 비교를 합니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            string str1 = "Hello, C#";
            string str2 = "Hello, Java";
            string str3 = "Hello, C#";
            string str4 = "Hello, c#";

            bool result = string.Compare(str1, str2, StringComparison.OrdinalIgnoreCase) == 0;
            Console.WriteLine("str1 == str2 ? " + result);

            result = string.Compare(str1, str3, StringComparison.OrdinalIgnoreCase) == 0;
            Console.WriteLine("str1 == str3 ? " + result);

            result = string.Compare(str1, str4, StringComparison.OrdinalIgnoreCase) == 0;
            Console.WriteLine("str1 == str4 ? " + result);
        }
    }
}

Output:

str1 == str2 ? False
str1 == str3 ? True
str1 == str4 ? True

3. StringComparer를 이용한 방법

StringComparer는 Compare(str1, str2) 함수를 제공하며 위의 Compare()와 동일하게 동작합니다.

StringComparer 객체를 생성할 때, StringComparer.Ordinal로 생성하면 대소문자를 구분하여 비교합니다.

아래와 같이 두개의 문자열이 같은지 비교할 수 있습니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            string str1 = "Hello, C#";
            string str2 = "Hello, Java";
            string str3 = "Hello, C#";
            string str4 = "Hello, c#";

            StringComparer sc = StringComparer.Ordinal;  

            bool result = sc.Compare(str1, str2) == 0;
            Console.WriteLine("str1 == str2 ? " + result);

            result = sc.Compare(str1, str3) == 0;
            Console.WriteLine("str1 == str3 ? " + result);

            result = sc.Compare(str1, str4) == 0;
            Console.WriteLine("str1 == str4 ? " + result);
        }
    }
}

Output:

str1 == str2 ? False
str1 == str3 ? True
str1 == str4 ? False

3.1 대소문자 구분 없이 비교(Ignore case)

StringComparer.OrdinalIgnoreCase로 StringComparer 객체를 생성하면 대소문자 구분 없이 비교합니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            string str1 = "Hello, C#";
            string str2 = "Hello, Java";
            string str3 = "Hello, C#";
            string str4 = "Hello, c#";

            StringComparer sc = StringComparer.OrdinalIgnoreCase;  

            bool result = sc.Compare(str1, str2) == 0;
            Console.WriteLine("str1 == str2 ? " + result);

            result = sc.Compare(str1, str3) == 0;
            Console.WriteLine("str1 == str3 ? " + result);

            result = sc.Compare(str1, str4) == 0;
            Console.WriteLine("str1 == str4 ? " + result);
        }
    }
}

Output:

str1 == str2 ? False
str1 == str3 ? True
str1 == str4 ? True
Loading script...
codechachaCopyright ©2019 codechacha