-
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"가 리턴된 것을 확인할 수 있습니다.
참고자료
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com
https://developer.apple.com/documentation/swift/string
Apple Developer Documentation
developer.apple.com
728x90'Programming > Swift' 카테고리의 다른 글
Swift - String CompareOptions (2) (0) 2021.08.05 Swift - String CompareOptions (1) (0) 2021.08.04 Swift - Compare String (String 비교하기) (0) 2021.08.02 Swift - String Method, Property (Delete) (0) 2021.08.01 Swift - String Method, Property (Update) (0) 2021.07.26