Swift

String Compare, Search, Option

dion_K 2020. 11. 19. 17:33
728x90

이번에는 문자열 비교, 검색, 옵션을 활용하는 방법을 알아보도록 하겠습니다.!!!

 

1. 문자열 비교

두 문자열을 비교하는 방법에 대해서 알아보도록 하겠습니다.

"IPhone" == "iPhone" // false
"IPhone" != "iPhone" // true

"IPhone" < "iPhone" // true

비교 연산자를 통해 두 문자열을 비교해보았습니다.

여기서 알 수 있는 건 Swift는 대소문자를 구분한다는 것입니다.

 

그럼 이번에는 메소드를 통해서 비교해보도록 하겠습니다.

문자열을 비교할 땐 compare 메소드를 사용합니다.

let a = "IPhone"
let b = "iPhone"

a.compare(b) == .orderedSame // false
a.caseInsensitiveCompare(b) == .orderedSame // true, 대소문자 구분없이 비교하는 방법입니다.
a.compare(b, options: [.caseInsensitive]) == .orderedSame // true, 위와 같습니다.

let str = "Hello, Swift"
var prefix = "Hello"
var suffix = "Swift"

str.hasPrefix(prefix) // true, 접두어 비교
str.hasSuffix(suffix) // true, 접미어 비교

prefix = "hello"
suffix = "swift"

str.hasPrefix(prefix) //false
str.lowercased().hasPrefix(prefix) // true
str.hasSuffix(suffix) // flase
str.lowercased().hasSuffix(suffix) // true

2. 문자열 검색

이번에는 문자열을 검색하는 방법에 대해서 알아보도록 하겠습니다!

let str = "SAMSUNG vs Apple"

str.contains("vs") // true
str.contains("Vs") // false, 대소문자를 구분합니다.

// 대소문자 구분 없이 검색하는 방법!
str.lowercased().contains("samsung") // true

// 범위 검색
str.range(of: "Apple")
str.range(of: "apple", options: [.caseInsensitive])

// 공통된 접두어 검색
let strA = "Welcome to the blog"
let strB = strA.lowercased()

strA.commonPrefix(with: strB) // 공통된 접두어가 없습니다.
strA.commonPrefix(with: strB, options: [.caseInsensitive]) // Welcome to the blog

3. 문자열 옵션

마지막으로 문자열에서 사용하는 여러가지 옵션들에 대해서 알아보도록 하겠습니다.

"A" == "a"

"A".caseInsensitiveCompare("a") == .orderedSame // true
"A".compare("a", options: [.caseInsensitive]) == .orderedSame // true

// Literal Option
let a = "\u{D55c}" // 한
let b = "\u{1112}\u{1161}\u{11AB}" // 한

a == b // true
a.compare(b) == .orderedSame // true
// 코드 유닛은 다르지만 최종 결과를 함께 비교해서 최종 결과가 같다면 같은거로 판단합니다.

a.compare(b, options: [.literal]) == .orderedSame // flase , 계산 결과가 훨씬 빠릅니다.

이번에는 문자열의 검색 방향을 지정해보도록 하겠습니다.

// 문자열의 검색 방향 지정
// Backwards Option

let english = "Hello, Swift"

if let range = english.range(of: "S") {
    english.distance(from: english.startIndex, to: range.lowerBound)
} // 7을 리턴, 8번째 인덱스를 나타냅니다.

// 문자열의 검색 방향을 바꾸는 옵션 backward
if let range = english.range(of: "l", options: [.backwards]) {
    english.distance(from: english.startIndex, to: range.lowerBound)
} // 3을 리턴, 4번째 인덱스를 나타냅니다. 뒤에서부터 검색!!
728x90