String Options
작성일
String Options
"A" == "a" // false -> 대소문자를 구분하기 때문
"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
스위프트에서는 결과값도 비교해주지만, Object-C는 결과값이 다르면 false를 나타낸다.
따라서 스위프트에서 Objcet-C 처럼 해주려면, Literal를 사용하면 된다.
a.compare(b, options: [.literal]) == .orderedSame // false
Backwards Options
- backwards 문자열의 검색 방향을 바꾸는 메서드 ~~~ let korean = “행복하세요” let english = “Be happy”
if let range = english.range(of: “p”) { english.distance(from: english.startIndex, to: range.lowerBound) } //5
if let range = english.range(of: “p”, options: [.backwards]) { english.distance(from: english.startIndex, to: range.lowerBound) } //6
# Anchored Option
- 검색범위를 문자열 시작이나 끝으로 지정이가능하다
let str = “Swift Programming”
if let result = str.range(of: “Swift”) { print(str.distance(from: str.stratIndex, to: result.lowerBound)) } esle { print(“not found”) } // “0\n”
if let result = str.range(of: “Swift”, options: [.backwards]) { print(str.distance(from: str.stratIndex, to: result.lowerBound)) } esle { print(“not found”) } // “0\n”
if let result = str.range(of: “Swift”, options: [.anchored]) { print(str.distance(from: str.stratIndex, to: result.lowerBound)) } esle { print(“not found”) } // “0\n”
if let result = str.range(of: “Swift”, options: [.anchored, .backwards]) { print(str.distance(from: str.stratIndex, to: result.lowerBound)) } esle { print(“not found”) } // “not found\n” -> 마지막 부분만 검색한것이다.
# Numeric Option
- 숫자 차체를 비교할수 있게 해 준다.
“A” < “B” // true “a” < “B” // false -> 아스키문자는 a가 더 크다.
let file9 = “file9.txt” let file10 = “file10.txt”
file9 < file10 // false -> 숫자가 더 커도 9가 더 크기때문에 False
file9.compare(file10) == .orderedAscending // false file9.compare(file10, options:[.numeric]) == .orderedAscending //true
# Diacritic Insensitive
- 발음기호를 무시하고 비교하고싶을때
let a = “Cafe” let b = “Cafè”
a == b //false a.compare(b) == .orderedSame // false a.compare(b, options: [.diacriticInsensitive]) == .orderedSame // true
# Forced Ordering Option
- 강제정렬
- 전체옵션을 적용했을떄, 같은문자열로 판단된다면, 일부 옵션을 무시하고 최대한 문자열의 순서를 파악할수있는걸 리턴해준다.
let upper = “STRING” let lower = “string”
upper == lower // fasle upper.compare(lower, optiuons: [.caseInsensitive]) == .orderedSame // true upper.compare(lower, optiuons: [.caseInsensitive, .forcedOrdering]) == .orderedSame // false
# Regular Expression
- 해당패턴이 존재한다면 범위를 리턴해준다.
let emailPattern = “([0-9a-zA-X_-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}” let emailAddress = “user@example.com”
if let _ = emailAddress.range(of: emailPattern) { print(“found”) } else { print(“not found”) } // “not found\n”
// 첫번째 파라미터로 전달된 문자열을 정규식으로 처리한다. // 정규식과일치하면 첫번쨰 범위가 리턴된다. if let _ = emailAddress.range(of: emailPattern, options[.regularExpression]) { print(“found”) } else { print(“not found”) } // “found” ~~~