728x90
반응형
사용되는 패턴 소개
1. public static int Compare(string strA, string strB);
2. public static int Compare(string strA, string strB, StirngComparison comparisonType);
3. public static int Compare(string strA, string strB, bool ignoreCase, CultureInfo culture);
4. public static int Compare(string strA, string strB, CultureInfo culture, ComparisonOptions options);
5. public static int Compare(string strA, int indexA, string strB, int indexB, int length);
6. public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool igonreCase);
7. public static int Compare(string strA, int indexA, string strB, int intdexB, int length, StringComparison comparisonType);
8. public static int Compare(string strA, int indexA, string strB, int intdexB, int length, bool igonreCase,CultureInfo culture);
9. public static int Compare(string strA, int indexA, string strB, int intdexB, int length, CultureInfo culture, ComparisonOptions options);
strA, strB : 비교할 문자열
comparison Type : StringComparison 열거형 자료 타입의 한 멤버 유형
indexA, indexB: 각 문자열의 시작 위치
A.문자열자체를 비교
1.int Compare(string strA, string strB)
using System;
namespace StringCompare
{
class Program
{
static void Main(string[] args)
{
string str1 = "Apple";
string str2 = "apple";
Console.WriteLine($"str1과 str2를 비교한 결과는 str1이 str2보다 큰경우 {string.Compare(str1,str2)} 입니다.");
Console.WriteLine($"str1과 str1를 비교한 결과는 같은 경우 {string.Compare(str1, str1)} 입니다.");
Console.WriteLine($"str1과 str2를 비교한 결과는 str2이 str1보다 작은경우 {string.Compare(str2, str1)} 입니다.");
}
}
}
- 즉, strA < strB 인 경우 -1 (정렬순서가 빠른경우)
- strA == strB 인 경우 0 (정렬 순서가 동일한 경우)
- strA > strB 인 경우 1 (정렬 순서가 느린 경우)
2.int Compare(string strA, string strB, StirngComparison comparisonType)
- comparisonType : StringComparison : 비교에 사용할 규칙을 지정하는 열거형 값 중 하나입니다.
using System;
namespace StringCompare
{
class Program
{
static void Main(string[] args)
{
string str1 = "Apple";
string str2 = "apple";
Console.WriteLine($"CurrentCultureIgnoreCase인 경우 대소문자 무시 {string.Compare(str1,str2, StringComparison.CurrentCultureIgnoreCase)} 입니다.");
}
}
}
2.1 comparisonType
comparisonTypeNumber설명
CurrentCulture | 0 | 문화권 구분 정렬 규칙 및 현재 문화권을 사용하여 문자열을 비교합니다. |
CurrentCultureIgnoreCase | 1 | 문화권 구분 정렬 규칙 및 현재 문화권을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다. |
InvariantCulture | 2 | 문화권 구분 정렬 규칙 및 고정 문화권을 사용하여 문자열을 비교합니다. |
InvariantCultureIgnoreCase | 3 | 문화권 구분 정렬 규칙 및 고정 문화권을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다. |
Ordinal | 4 | 서수(이진) 정렬 규칙을 사용하여 문자열을 비교합니다. |
OrdinalIgnoreCase | 4 | 서수(이진) 정렬 규칙을 사용하고 비교되는 문자열의 대/소문자를 무시하여 문자열을 비교합니다. |
2.1.1 사용예제
using System;
using System.Globalization;
using System.Threading;
namespace StringCompare
{
class Program
{
static void Main(string[] args)
{
String[] cultureNames = { "en-US", "se-SE" };
String[] strings1 =
{
"case", "encyclopædia",
"encyclopædia", "Archæology"
};
String[] strings2 =
{
"Case", "encyclopaedia",
"encyclopedia", "ARCHÆOLOGY"
};
StringComparison[] comparisons = (StringComparison[])Enum.GetValues(typeof(StringComparison));
foreach (var cultureName in cultureNames)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
Console.WriteLine("Current Culture: {0}", CultureInfo.CurrentCulture.Name);
for (int ctr = 0; ctr <= strings1.GetUpperBound(0); ctr++)
{
foreach (var comparison in comparisons)
Console.WriteLine(" {0} = {1} ({2}): {3}", strings1[ctr],
strings2[ctr], comparison,
String.Equals(strings1[ctr], strings2[ctr], comparison));
Console.WriteLine();
}
Console.WriteLine();
}
}
}
}
2.1.2 예제 결과
Current Culture: en-US
case = Case (CurrentCulture): False
case = Case (CurrentCultureIgnoreCase): True
case = Case (InvariantCulture): False
case = Case (InvariantCultureIgnoreCase): True
case = Case (Ordinal): False
case = Case (OrdinalIgnoreCase): True
encyclopædia = encyclopaedia (CurrentCulture): False
encyclopædia = encyclopaedia (CurrentCultureIgnoreCase): False
encyclopædia = encyclopaedia (InvariantCulture): False
encyclopædia = encyclopaedia (InvariantCultureIgnoreCase): False
encyclopædia = encyclopaedia (Ordinal): False
encyclopædia = encyclopaedia (OrdinalIgnoreCase): False
encyclopædia = encyclopedia (CurrentCulture): False
encyclopædia = encyclopedia (CurrentCultureIgnoreCase): False
encyclopædia = encyclopedia (InvariantCulture): False
encyclopædia = encyclopedia (InvariantCultureIgnoreCase): False
encyclopædia = encyclopedia (Ordinal): False
encyclopædia = encyclopedia (OrdinalIgnoreCase): False
Archæology = ARCHÆOLOGY (CurrentCulture): False
Archæology = ARCHÆOLOGY (CurrentCultureIgnoreCase): True
Archæology = ARCHÆOLOGY (InvariantCulture): False
Archæology = ARCHÆOLOGY (InvariantCultureIgnoreCase): True
Archæology = ARCHÆOLOGY (Ordinal): False
Archæology = ARCHÆOLOGY (OrdinalIgnoreCase): True
Current Culture: se-SE
case = Case (CurrentCulture): False
case = Case (CurrentCultureIgnoreCase): True
case = Case (InvariantCulture): False
case = Case (InvariantCultureIgnoreCase): True
case = Case (Ordinal): False
case = Case (OrdinalIgnoreCase): True
encyclopædia = encyclopaedia (CurrentCulture): False
encyclopædia = encyclopaedia (CurrentCultureIgnoreCase): False
encyclopædia = encyclopaedia (InvariantCulture): False
encyclopædia = encyclopaedia (InvariantCultureIgnoreCase): False
encyclopædia = encyclopaedia (Ordinal): False
encyclopædia = encyclopaedia (OrdinalIgnoreCase): False
encyclopædia = encyclopedia (CurrentCulture): False
encyclopædia = encyclopedia (CurrentCultureIgnoreCase): False
encyclopædia = encyclopedia (InvariantCulture): False
encyclopædia = encyclopedia (InvariantCultureIgnoreCase): False
encyclopædia = encyclopedia (Ordinal): False
encyclopædia = encyclopedia (OrdinalIgnoreCase): False
Archæology = ARCHÆOLOGY (CurrentCulture): False
Archæology = ARCHÆOLOGY (CurrentCultureIgnoreCase): True
Archæology = ARCHÆOLOGY (InvariantCulture): False
Archæology = ARCHÆOLOGY (InvariantCultureIgnoreCase): True
Archæology = ARCHÆOLOGY (Ordinal): False
Archæology = ARCHÆOLOGY (OrdinalIgnoreCase): True
3.public static int Compare(string strA, string strB, bool ignoreCase, CultureInfo culture)
- ignoreCase :Boolean : 비교 시 대/소문자를 무시하려면 true이고, 그러지 않으면 false입니다.
- culture : CultureInfo :문화권별 비교 정보를 제공하는 개체입니다.
using System;
using System.Globalization;
namespace StringCompare
{
class Program
{
static void Main(string[] args)
{
string str1 = "Apple";
string str2 = "apple";
Console.WriteLine($"str1과 str2를 비교시 대문자 소문자 비교안함 {string.Compare(str1, str2,true, new CultureInfo("en-US"))} 입니다.");
Console.WriteLine($"str1과 str2를 비교시 대문자 소문자 비교함 {string.Compare(str1, str2, false, new CultureInfo("en-US"))} 입니다.");
}
}
}
4.int Compare(string strA, string strB, CultureInfo culture, ComparisonOptions options)
- culture: CultureInfo :문화권별 비교 정보를 제공하는 문화권입니다.
- options : CompareOptions :대/소문자 또는 기호 무시 여부와 같이 비교를 수행할 때 사용할 옵션입니다.
4.1 CompareOptions
IgnoreCase1이 문자열 비교 옵션은 대/소문자를 무시함을 나타냅니다.
IgnoreKanaType | 8 | 이 문자열 비교 옵션은 일본어 가나 형식을 무시함을 나타냅니다. 가나 형식은 일본어의 발성음을 표현하는 히라가나 문자와 가타카나 문자를 나타냅니다. 히라가나는 일본 고유의 어구과 단어를 표현하는 데 사용되고, 가타카나는 "컴퓨터"나 "인터넷" 등과 같은 외래어를 표현하는 데 사용됩니다. 발성음은 히라가나와 가타카나 모두로 표현할 수 있습니다. 이 값이 선택되어 있으면 하나의 발성음에 대해 히라가나 문자와 가타카나 문자가 같은 것으로 간주됩니다. |
IgnoreNonSpace | 2 | 분음 부호와 같이 공백 없는 조합 문자를 무시하는 문자열 비교를 나타냅니다. 유니코드 표준(Unicode Standard)에서 조합 문자는 기본 문자와 조합하여 새 문자를 만들어내는 문자로 정의됩니다. 간격이 없는 조합 문자는 렌더링될 때 스스로 공간을 차지하지 않습니다. |
IgnoreSymbols | 4 | 이 문자열 비교 옵션은 공백 문자, 문장 부호, 통화 기호, 백분율 기호, 수학 기호, 앰퍼샌드 등의 기호를 무시함을 나타냅니다. |
IgnoreWidth | 16 | 이 문자열 비교 옵션은 문자 너비를 무시함을 나타냅니다. 예를 들어 일본어의 가타카나 문자는 전자나 반자로 쓸 수 있는데, 이 값이 선택되어 있으면 전자로 쓰여진 가타카나 문자와 반자로 쓰여진 가타카나 문자가 같은 것으로 간주됩니다. |
None | 0 | 문자열 비교를 위한 기본 옵션 설정을 나타냅니다. |
Ordinal | 1073741824 | 문자열 비교가 문자열의 후속 유니코드 UTF-16 인코딩 값을 사용해야 함을 나타냅니다(코드 단위별 코드 단위 비교). 이 값을 사용하면 문자열을 빠르게 비교할 수 있지만 문화권을 구분할 수는 없습니다. XXXX16이 YYYY16보다 작은 경우 코드 단위 XXXX16으로 시작하는 문자열이 YYYY16으로 시작하는 문자열 앞에 옵니다. 이 값은 다른 CompareOptions 값과 함께 사용할 수 없으며 단독으로 사용해야 합니다. |
OrdinalIgnoreCase | 268435456 | 문자열 비교에서는 대/소문자를 무시하고 서수 비교를 수행해야 합니다. 이 기술은 고정 문화권을 사용하여 문자열을 대문자로 변환한 다음 해당 결과에 대해 서수 비교를 수행하는 것과 같습니다. |
StringSort | 536870912 | 이 문자열 비교 옵션은 문자열 정렬 알고리즘을 사용해야 함을 나타냅니다. 문자열 정렬에서 하이픈, 아포스트로피, 비영숫자 기호 등이 영숫자 문자 앞에 옵니다. |
B.문자열안의 문자열을 비교
5.int Compare(string strA, int indexA, string strB, int indexB, int length)
- 부분 문자열을 비교함
- indexA : strA에 있는 부분 문자열의 위치입니다.
- indexB : strB에 있는 부분 문자열의 위치입니다.
- length : 비교할 부분 문자열의 최대 문자 수입니다.
using System;
using System.Globalization;
namespace StringCompare
{
class Program
{
static void Main(string[] args)
{
string str1 = "machine";
string str2 = "device";
Console.WriteLine();
Console.WriteLine($"str1 = '{str1}', str2 = '{str2}'");
Console.WriteLine($"{string.Compare(str1, 2, str2, 0, 2)}");
}
}
}
- indexA와 B는 각 문자열에서 시작하는 인덱스
- length는 길이
- 즉, str1에서는machine
0 1 2 3 4 5 6 - ch가 되는거 2부터 시작해서 두개
- 2,3번 인덱스이기 때문
- ch가 되는거 2부터 시작해서 두개
- str2는device
0 1 2 3 4 5 - de가됨
- 0,1번 인덱스이기때문
- de가됨
- 즉, str1에서는machine
- 그래서 ch 와 de를 비교하는것 그래서 예제에서는 -1이나옴 ch가 사전순으로 앞서기때문
6.int Compare(string strA, int indexA, string strB, int indexB, int length, bool igonreCase)
- ignoreCase : 비교 시 대/소문자를 무시하려면 true이고, 그러지 않으면 false입니다.
- 5번과 같지만 마지막 매게 변수에 true하면 대소문자 무시, false인 경우 무시 안함
7.int Compare(string strA, int indexA, string strB, int intdexB, int length, StringComparison comparisonType)
- 5번에 comparisonType을 추가한것 옵션은 2.1 comparisonType참고
8.int Compare(string strA, int indexA, string strB, int intdexB, int length, bool igonreCase,CultureInfo culture)
- ignoreCase 와 culture
- CultureInfo : 문화권별 비교 정보를 제공하는 개체를 포함시키는 경우
9.int Compare(string strA, int indexA, string strB, int intdexB, int length, CultureInfo culture, ComparisonOptions options)
- CultureInfo : 문화권별 비교 정보를 제공하는 개체를 포함시키는 경우
- options : CompareOptions :대/소문자 또는 기호 무시 여부와 같이 비교를 수행할 때 사용할 옵션입니다.
- 4.1 CompareOptions에서 옵션 확인
728x90
반응형
'CS Study > Csharp' 카테고리의 다른 글
22.02.26_3.데이터형식과클래스 (0) | 2022.02.27 |
---|---|
22.02.17_스레드와태스크 (0) | 2022.02.20 |
22.02.07_Csharp람다식 (0) | 2022.02.07 |
22.02.06_Csharp대리자와이벤트 (0) | 2022.02.06 |
22.02.06_Csharp예외처리하기 (0) | 2022.02.06 |
댓글