ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift - String Search (문자열 검색)
    Programming/Swift 2021. 8. 3. 11:19

     

     

    오늘 공부해볼 주제는 검색입니다.

    크게 어렵지 않고 지금까지 했던 것처럼 메서드를 잘 이용하면 쉽습니다.

     

    그럼 시작하겠습니다!

     


     

    contain(_:)

     

    가장 기본적인 메서드는 contains(_:) 입니다.

    파라미터로 전달한 문자나 문자열이 존재한다면 true 없다면 false를 리턴해주는 메서드입니다.

     

     

    위에 함수 헤더를 보면 Character를 받지만 StringProtocol, 클로저를 받는 메서드도 존재합니다.

    그래서 파라미터에 "H"만 전달해도 되고 "Hello"를 전달해도 정상적으로 잘 작동하는 것을 확인할 수 있습니다.

    "S"는 존재하지 않기 때문에 false가 리턴되는 것을 볼 수 있습니다.

     

     

    메서드를 보면 options 파라미터가 없습니다.

    Swift는 대소문자를 구분하기 때문에"hello"를 전달하면 false가 리턴됩니다.

    대소문자를 무시하고 비교하고 싶다면 문자열을 모두 소문자로 변환시킨 후 비교하면 됩니다.

     


     

    firstIndex(of:), lastIndex(of:)

     

    이 메서드는 이전 String Index 포스팅에서 다룬 적이 있습니다.

    간단하게 설명하자면 파라미터로 전달한 문자를 검색하여 Index를 리턴해줍니다.

    자세한 건 이전 포스팅을 참고해주세요!

     

    다음에 볼 메서드는 range(of:options:range:locale:) 입니다.

     


     

    range(of:options:range:locale:)

     

    이 메서드는 문자나 문자열이 존재한다면 인덱스 범위를 리턴해줍니다.

    함수 헤더에 제네릭과 where이 들어가서 어려워 보이지만 그 부분을 빼고 리턴형을 보면 옵셔널을 리턴하고 있습니다.

    검색한 문자나 문자열이 존재한다면 Range<Self.Index>를 리턴해주고 없다면 nil을 리턴해줍니다.

    4가지 파라미터는 이전에 compare(_:options:range:locae:) 에서 본 것과 유사합니다.

     

    코드를 보도록 하겠습니다.

     

    range(of:) 메서드는 removeSubrange(_:), replaceSubrange(_:with:) 메서드를 사용할 때 자주 사용합니다.

    "BeePeach"를 검색하고 범위를 range에 담았습니다.

    그리고 이 range를 이용해 removeSubrange(_:) 메서드를 사용해서 "BeePeach"를 삭제했습니다.

     

    다음 코드는 대소문자를 무시하는 options를 추가하고 검색하여  replaceSubrange(_:with:)로 원하는 부분을 변경하는 코드입니다.

     

     


     

    commonPrefix(with:options:)

     

    이 메서드는 첫 번째 파라미터로 전달한 문자열과 호출한 문자열의 공통적인 접두어를 리턴해줍니다.

    그리고 지금까지 prefix가 존재한다면 suffix 이름을 가진 메서드도 존재했지만 commonSuffix(with:options:) 메서드는 존재하지 않습니다.

     

    말로는 이해가 힘들 수 있으니 바로 코드를 보도록 하겠습니다.

     

    helloBee와 helloHoney 두 문자열의 공통적인 접두어는 "Hello, "입니다. 뒤에 띄어쓰기까지 포함인 것을 확인해주세요.

    간단히 말해서 두 문자열의 처음 문자부터 일치하지 않는 문자까지의 문자열을 리턴해줍니다.

     

    만약 공통 접두어가 없다면 빈 문자열을 리턴해줍니다.

    helloBee와 byeBee는 뒤의 ", Beepeach!"부분은 같지만 접두어는 일치하지 않습니다. 그래서 빈 문자열이 리턴됩니다.

     

    파라미터에 options가 있는 것을 보면 대소문자를 무시하고 비교하는 옵션을 사용할 수 있는 것을 알 수 있습니다.

    여기서 주의해서 봐야 할 부분은 리턴되는 공통 접두어는 호출한 문자열 기준입니다.

    Hello를 기준으로 메서드를 호출했더니 "Hello, BeePeach"

    hello를 기준으로 호출했더니 "hello, BeePeach"가 리턴된 것을 확인할 수 있습니다.

     

     


     

    참고자료

     

    https://kxcoding.com

     

    여러분의 새로운 도전을 응원합니다 | KxCoding

    Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기

    kxcoding.com

     

     

    https://developer.apple.com/documentation/swift/string

     

    Apple Developer Documentation

     

    developer.apple.com

     

     

     

    728x90
Designed by Tistory.