C#/문법 정리

C# - 문자열의 검색

Khadra 2024. 7. 9. 08:43

Sring 클래스에는 문자열을 검색할 수 있는 여러가지 메소드들이 있다.

  • 이를 통해서 문자열에 특정한 글자가 포함되어 있는지, 어느 위치에 있는지 등을 알 수 있다.

Sring 클래스에는 문자열을 검색할 수 있는 메소드 종류

  • Contains() 메소드

    • String에 특정 문자열이 포함되어 있는지를 체크한다.
    • 포함되어 있다면 true, 되지 않았다면 false를 리턴하는 Bool 메소드이다.
    • 예시
      // b는 true 값을 갖는 경우
      string s1 = "mouse, cow, tiger, rabbit, dragon";
      string s2 = "cow";
      bool b = s1.Contains(s2);
      WriteLine(b);  // True

  • IndexOf() 메소드

    • 문자열에서 특정 문자/문자열이 나타내는 인덱스를 리턴해준다.
    • 인덱스는 0부터 시작한다.
    • 찾는 문자열이 없을 때 -1를 리턴한다.
    • 리턴값이 -1인지 아닌지로 문자열을 포함하고 있는지 알 수 있다.
    • 여러가지 방법으로 중복되어 있다.
    • 예시
      public int IndexOf(char, int, int, StringComparision);
      public int IndexOf(String, int, int, StringComparision);
      • 매개변수 첫번째는 하나의 문자 또는 문자열이다.
      • 나머지 매개변수는 없어도 되는데 첫번째 숫자는 시작인덱스,
        두번째 숫자는 시작 인덱스에서부터 비교할 글자 수,
        마지막의 StringComparison은 비교 방법을 지정하는 열거형이다.
  • 대소문자를 구분하지 않는 비교

    • Contains() 메소드는 대소문자를 구별가능하다.
    • 따라서, s2 = "Cow"였다면 b는 false를 반환했다.
    • 예시
      // 대소문자를 구분하지 않고 비교한다면 StringComparison 열거형을 사용하면 된다.
      public int IndexOf(string value, StringComparison comparisonType);
      • StringComparison 열거형은 언어, 정렬순서, 대소문자 구분 여부등을 표현한다.
      • 6개의 값을 갖는다.
        • CurrentCulture
        • CurrentCultureIgnoerCase
        • InvatiantCulture
        • InvariantCultrureIgnoreCase
        • Ordinal
        • OrdinalIgnoreCase
      • IngnoreCase가 들어 있는 열거형을 사용하면 대소문자를 구분하지 않고 비교가 가능하다.
  • String.StartWith()와 String.EndWith() 메소드

    • StartWith() 메소드는 문자열이 특정 문자열로 시작되는지를 알려준다.
    • EndWith() 메소드는 특정 문자열로 끝나는지를 알려준다.

예제 코드

using System;
using static System.Console;//Console단어를 생략(코드길이줄어둠)
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {   // string 변수 s1과 s2를 선언하고 초기화한다.
            string s1 = "mouse, cow, tiger, rabbit, dragon";

            // s2가 "Cow"일 때와 "cow"일 때로 나누어 실행한다.
            string s2 = "Cow";

            // s1이 s2를 포함하고 있는지 체크한다. 
            bool b = s1.Contains(s2);

            // s2값이 대문자로 시작하는 "Cow"이므로 s1에는 포함되어 있지 않기 때문에 b값은 false가 된다. 
            // 만약 s2가 "cow"라면 b의 값은 true가 된다.
            WriteLine("'{0}' is in the string '{1}' : {2}", s2, s1, b); 

            if (b)                                          
            {
                // s1이 s2를 포함되어 있다면 IndexOf() 메소드를 사용하여 몇 번째 인덱스에 위치하는지를 출력한다.
                int index = s1.IndexOf(s2);

                // 인덱스는 0 부터 시작한다. 이 부분은 s2가 "Cow"라면 실행되지 않는다. 
                if (index >= 0) {
                    // s2가 "cow"라면 7번 인덱스에 위치하므로 7를 출력한다.
                    WriteLine("{0} begins at Index {1}", s2, index);
                }                             

            }
            // StringComparison을 사용하는 IndexOf() 메소드를 사용하는 예입니다.
            // CurrentCultureIgnoreCase를 사용하면 대소문자를 구분하지 않습니다.
            if (s1.IndexOf(s2, StringComparison.CurrentCultureIgnoreCase) >= 0) 
            {
                // 리턴값이 -1이라면 s2가 s1에 없다는 뜻이고, 0보다 크거나 같다는 것은 
                // 찾고자 하는 값이 s1에 포함되어 있다는 뜻이다.
                WriteLine("'{0}' is in the string '{1}'", s2, s1);
            }                       
        }
    }
}

결과

// s2 = "Cow"일 때
'Cow' is in the string 'mouse, cow, tiger, rabbit, dragon' : False
'Cow' is in the string 'mouse, cow, tiger, rabbit, dragon'


// s2 = "cow"일 때
'cow' is in the string 'mouse, cow, tiger, rabbit, dragon' : True
cow begins at Index 7
'cow' is in the string 'mouse, cow, tiger, rabbit, dragon'

'C# > 문법 정리' 카테고리의 다른 글

C# - 그룹 분리자(Group Separator)  (0) 2024.07.11
C# - String.Format()  (0) 2024.07.10
C# - String.Split() 메소드  (0) 2024.07.08
C# - 정적 메소드(static method)  (0) 2024.07.07
C# - String 클래스(String Class)  (0) 2024.07.06