문자열 비교
업데이트: 2007년 11월
.NET Framework에는 문자열의 값을 비교하는 메서드가 있습니다. 다음 표에는 값을 비교하는 데 사용하는 메서드 및 설명이 나와 있습니다.
메서드 이름 |
사용 대상 |
---|---|
두 문자열의 값을 비교합니다. 정수 값을 반환합니다. |
|
로컬 문화권에 상관없이 두 문자열을 비교합니다. 정수 값을 반환합니다. |
|
현재 문자열 개체를 다른 문자열과 비교합니다. 정수 값을 반환합니다. |
|
문자열의 시작 부분이 전달된 다른 문자열과 같은지 여부를 확인합니다. 부울 값을 반환합니다. |
|
문자열의 끝 부분이 전달된 다른 문자열과 같은지 여부를 확인합니다. 부울 값을 반환합니다. |
|
두 문자열이 동일한지 확인합니다. 부울 값을 반환합니다. |
|
지정한 문자 또는 문자열이 대상 문자열에서 차지하는 인덱스 위치를 반환합니다. 이 인덱스는 대상 문자열의 시작 부분에서 시작됩니다. 정수 값을 반환합니다. |
|
지정한 문자 또는 문자열이 대상 문자열에서 차지하는 인덱스 위치를 반환합니다. 이 인덱스는 대상 문자열의 끝 부분에서 시작됩니다. 정수 값을 반환합니다. |
Compare
String.Compare 메서드를 사용하면 현재 문자열 개체를 다른 문자열이나 개체와 완전하게 비교할 수 있습니다. 이 메서드는 문화권을 인식할 수 있습니다. 이 함수를 사용하여 두 개의 문자열 또는 두 문자열의 부분 문자열을 비교할 수 있습니다. 또한 대/소문자 구분 여부나 문화권 차이의 반영 여부를 지정할 수 있는 오버로드도 제공됩니다. 다음 표에는 이 메서드에서 반환하는 세 가지 정수 값이 나와 있습니다.
값 형식 |
조건 |
---|---|
음의 정수 |
strA가 strB보다 작은 경우 |
0 |
strA와 strB가 같은 경우 |
양의 정수 - 또는 - 1 |
이 인스턴스가 값보다 큰 경우 - 또는 - 값이 null 참조(Visual Basic에서 Nothing)인 경우 |
중요: |
---|
Compare 메서드는 주로 문자열의 순서를 지정하거나 문자열을 정렬할 때 사용됩니다. 같음 테스트에는 Compare 메서드를 사용하면 안 됩니다. 즉, 한 문자열이 다른 문자열보다 작은지 큰지를 확인하지 않고 반환 값 0을 명시적으로 검색해서는 안 됩니다. 대신 두 문자열이 같은지를 확인하려면 String.Equals(String, String, StringComparison) 메서드를 사용합니다. |
다음 예제에서는 Compare 메서드를 통해 두 문자열을 비교하여 상대 값을 확인합니다.
Dim MyString As String = "Hello World!"
Console.WriteLine([String].Compare(MyString, "Hello World?"))
string MyString = "Hello World!";
Console.WriteLine(String.Compare(MyString, "Hello World?"));
이 예제를 실행하면 -1가 콘솔에 출력됩니다.
앞의 예제는 기본적으로 문화권을 구분합니다. 문화권을 구분하지 않는 문자열 비교를 수행하려면 culture 매개 변수를 제공하여 사용할 문화권을 지정할 수 있는 String.Compare 메서드의 오버로드를 사용합니다. String.Compare 메서드를 사용하여 문화권을 구분하지 않는 비교를 수행하는 방법을 보여 주는 예제는 문화권을 구분하지 않는 문자열 비교 수행에서 볼 수 있습니다.
CompareOrdinal
String.CompareOrdinal 메서드에서는 로컬 문화권에 관계없이 두 문자열 개체를 비교합니다. 이 메서드의 반환 값은 앞의 표에 있는 Compare 메서드의 반환 값과 동일합니다.
중요: |
---|
CompareOrdinal 메서드는 주로 문자열의 순서를 지정하거나 문자열을 정렬할 때 사용됩니다. 같음 테스트에는 CompareOrdinal 메서드를 사용하면 안 됩니다. 즉, 한 문자열이 다른 문자열보다 작은지 큰지를 확인하지 않고 반환 값 0을 명시적으로 검색해서는 안 됩니다. 대신 두 문자열이 같은지를 확인하려면 String.Equals(String, String, StringComparison) 메서드를 사용합니다. |
다음 예제에서는 CompareOrdinal 메서드를 사용하여 두 문자열의 값을 비교합니다.
Dim MyString As String = "Hello World!"
Console.WriteLine(String.CompareOrdinal(MyString, "hello world!"))
string MyString = "Hello World!";
Console.WriteLine(String.CompareOrdinal(MyString, "hello world!"));
이 예제를 실행하면 -32가 콘솔에 출력됩니다.
CompareTo
String.CompareTo 메서드에서는 현재 문자열 개체에 캡슐화된 문자열을 다른 문자열 또는 개체와 비교합니다. 이 메서드의 반환 값은 앞의 표에 있는 Compare 메서드의 반환 값과 동일합니다.
중요: |
---|
CompareTo 메서드는 주로 문자열의 순서를 지정하거나 문자열을 정렬할 때 사용됩니다. 같음 테스트에는 CompareTo 메서드를 사용하면 안 됩니다. 즉, 한 문자열이 다른 문자열보다 작은지 큰지를 확인하지 않고 반환 값 0을 명시적으로 검색해서는 안 됩니다. 대신 두 문자열이 같은지를 확인하려면 String.Equals(String, String, StringComparison) 메서드를 사용합니다. |
다음 예제에서는 CompareTo 메서드를 사용하여 MyString 개체와 OtherString 개체를 비교합니다.
Dim MyString As String = "Hello World"
Dim OtherString As String = "Hello World!"
Dim MyInt As Integer = MyString.CompareTo(OtherString)
Console.WriteLine(MyInt)
String MyString = "Hello World";
String OtherString = "Hello World!";
int MyInt = MyString.CompareTo(OtherString);
Console.WriteLine( MyInt );
이 예제를 실행하면 1가 콘솔에 출력됩니다.
기본적으로 String.CompareTo 메서드의 모든 오버로드는 문화권을 구분하며 대/소문자를 구분하는 비교 작업을 수행합니다. 그러나 이 메서드에 대해 문화권을 구분하지 않는 비교 작업을 수행할 수 있는 오버로드는 제공되지 않습니다. 코드의 명확성을 위해 문화권을 구분하는 작업에 대해서는 CultureInfo.CurrentCulture를 지정하고 문화권을 구분하지 않는 작업에 대해서는 CultureInfo.InvariantCulture를 지정하여 대신 String.Compare 메서드를 사용하는 것이 좋습니다. String.Compare 메서드를 사용하여 문화권을 구분하는 비교 및 문화권을 구분하지 않는 비교를 모두 수행하는 방법을 보여 주는 예제에 대해서는 문화권을 구분하지 않는 문자열 비교 수행을 참조하십시오.
Equals
String.Equals 메서드를 사용하여 두 문자열이 같은지 여부를 쉽게 확인할 수 있습니다. 이 메서드에서는 대/소문자를 구분하며 부울 값인 true 또는 false를 반환합니다. 다음 예제와 같이 기존 클래스에서도 이 메서드를 사용할 수 있습니다. 다음 예제에서는 Equals 메서드를 사용하여 문자열 개체에 "Hello World"라는 구가 있는지 확인합니다.
Dim MyString As String = "Hello World"
Console.WriteLine(MyString.Equals("Hello World"))
string MyString = "Hello World";
Console.WriteLine(MyString.Equals("Hello World"));
이 예제를 실행하면 True가 콘솔에 출력됩니다.
이 메서드는 정적 메서드로 사용할 수도 있습니다. 다음 예제에서는 정적 메서드를 사용하여 두 문자열 개체를 비교합니다.
Dim MyString As String = "Hello World"
Dim YourString As String = "Hello World"
Console.WriteLine(String.Equals(MyString, YourString))
string MyString = "Hello World";
string YourString = "Hello World";
Console.WriteLine(String.Equals(MyString, YourString));
이 예제를 실행하면 True가 콘솔에 출력됩니다.
StartsWith 및 EndsWith
String.StartsWith 메서드를 사용하면 특정 문자들이 다른 문자열을 포함하는 문자열 개체의 시작 부분에 있는지 여부를 확인할 수 있습니다. 이 메서드에서는 대/소문자를 구분하며, 전달된 문자열이 현재 문자열 개체의 시작 부분에 있으면 true를 반환하고 그렇지 않은 경우 false를 반환합니다. 다음 예제에서는 이 메서드를 사용하여 문자열 개체의 시작 부분에 "Hello"라는 단어가 있는지 확인합니다.
Dim MyString As String = "Hello World"
Console.WriteLine(MyString.StartsWith("Hello"))
string MyString = "Hello World";
Console.WriteLine(MyString.StartsWith("Hello"));
이 예제를 실행하면 True가 콘솔에 출력됩니다.
String.EndsWith 메서드에서는 전달된 문자열이 현재 문자열 개체의 끝 부분에 있는지 여부를 확인합니다. 이 메서드에서도 부울 값을 반환합니다. 다음 예제에서는 EndsWith 메서드를 사용하여 문자열의 끝 부분을 확인합니다.
Dim MyString As String = "Hello World"
Console.WriteLine(MyString.EndsWith("Hello"))
string MyString = "Hello World";
Console.WriteLine(MyString.EndsWith("Hello"));
이 예제를 실행하면 False 가 콘솔에 출력됩니다.
IndexOf 및 LastIndexOf
String.IndexOf 메서드를 사용하면 특정한 문자가 문자열 안에서 처음으로 나타나는 위치를 확인할 수 있습니다. 대/소문자를 구분하는 이 메서드에서는 문자열의 시작 부분에서 계산을 시작하여 전달된 문자의 위치를 0에서 시작하는 인덱스를 사용하여 반환합니다. 문자를 찾을 수 없으면 –1이 반환됩니다.
다음 예제에서는 IndexOf 메서드를 사용하여 'l' 문자가 문자열에서 처음으로 나타나는 위치를 검색합니다.
Dim MyString As String = "Hello World"
Console.WriteLine(MyString.IndexOf("l"c))
string MyString = "Hello World";
Console.WriteLine(MyString.IndexOf('l'));
이 예제를 실행하면 2가 콘솔에 출력됩니다.
String.LastIndexOf 메서드는 문자열에서 특정 문자가 발견된 마지막 위치를 반환한다는 점을 제외하면 String.IndexOf 메서드와 비슷합니다. 이 메서드에서는 대/소문자를 구분하며 0에서 시작하는 인덱스를 사용합니다.
다음 예제에서는 LastIndexOf 메서드를 사용하여 'l' 문자가 문자열에서 마지막으로 나타나는 위치를 검색합니다.
Dim MyString As String = "Hello World"
Console.WriteLine(MyString.LastIndexOf("l"c))
string MyString = "Hello World";
Console.WriteLine(MyString.LastIndexOf('l'));
이 예제를 실행하면 9가 콘솔에 출력됩니다.
위의 두 메서드는 String.Remove 메서드와 병행하여 사용하면 유용합니다. IndexOf 또는 LastIndexOf 메서드를 사용하여 특정 문자의 위치를 검색한 다음, 위치를 Remove 메서드에 전달하여 문자를 제거하거나 그 문자로 시작하는 단어를 제거할 수 있습니다.