문자열에서 문자나 코드 유닛의 위치이다.
swift는 유니코드 문자를 처리해야해서 문자열의 인덱스를 Int 0,1,2...
가 아니라 string.Index라는 타입을 사용한다.
let str = "Swift"
let firstCh = str[str.startIndex]
print(firstCh)
// 출력값: S
// 마지막 문자의 인덱스를 구하려면
// endIndex는 마지막 문자의 다음 인덱스라서 endIndex의 바로 전 문자가 마지막 문자이다.
// str.endIndex가 정수가 아니라서 -1을 할 수 없고, index(before:)라는 메소드를 사용해야한다.
let lastCharIndex = str.index(before: str.endIndex)
let lastCh = str[lastCharIndex]
print(lastCh)
// 출력값: t
// 두번째 문자의 인덱스는 index(after:) 메소드를 이용할 수 있다.
let secondCharIndex = str.index(after: str.startIndex)
let secondCh = str[secondCharIndex]
print(secondCh)
// 출력값: w
// 원하는 위치의 문자열의 인덱스를 구하려면 offsetBy 메소드를 사용한다.
let thirdCharIndex = str.index(str.startIndex, offsetBy: 2)
let thirdCh = str[thirdCharIndex]
print(thirdCh)
// 출력값: i
// endIndex가 마지막 문자의 다음 인덱스니까 -2
let fourthCharIndex = str.index(str.endIndex, offsetBy: -2)
let fourthCh = str[fourthCharIndex]
print(fourthCh)
// 출력값: f
let str = " \(h) \(s)"
print(str)
// 출력값: h s
let a = "h"
let b = "s"
let str2 = a + b
print(str2)
// + 연산자만 사용가능
// 출력값: hs
append: 파라미터로 append한 문자열을 대상 문자열에 바로 연결
var greeting = "Hello"
greeting.append("!")
print(greeting)
// 출력값: Hello!
appending: 새로운 복사본에 연결하고 복사본을 return해줌
let name = greeting.appending("Hansol")
print(greeting) // 출력값: Hello! (greeting 변수에 추가되지않음)
print(name) // 출력값: Hello!Hansol
name.append("Hansol") // Error: append는 해당 변수가 바로 변경되기 때문에 상수에 사용 불가능
문자열 중간에 문자 추가
var insertStr = "Hello Swift"
insertStr.insert("!", at: str.index(str.startIndex, offsetBy: 5))
print(insertStr)
// 출력값: Hello! Swift
var swift = "Hello, Swift"
// firstIndex부터 "S"문자까지 검색해서 그 인덱스 위치에 insert
if let sIndex = swift.firstIndex(of: "S") {
swift.insert(contentsOf: "Awesome ", at: sIndex)
}
print(swift)
// 출력값: Hello, Awesome Swift
replaceSubrange: 파라미터로 replace한 문자열을 대상 문자열에 바로 연결
var str = "Hello, Objective-C"
// range 메소드를 이용해서 범위 구하기
// 해당하는 값이 없을때는 nil을 반환하기 때문에 옵셔널 바인딩해서 사용
if let range = str.range(of: "Objective-C"){
str.replaceSubrange(range, with: "Swift")
}
print(str) // 출력값: Hello, Swift
replacingCharacters: 새로운 복사본에 연결하고 복사본을 return해줌
if let range = str.range(of: "Hello"){
let s = str.replacingCharacters(in: range, with: "Hi")
print(str) // 출력값: Hello, Swift
print(s) // 출력값: Hi, Swift
}
replacingOccurrences: range 메소드를 이용하지 않고 교체 가능
var s = str.replacingOccurrences(of: "Swift", with: "Awesome Swift")
print(s) // 출력값: Hello, Awesome Swift
// 문자열을 비교할때는 대소문자를 구분하고, 찾는 문자가 없을시에는 원본값을 그대로 리턴함
s = str.replacingOccurrences(of: "swift", with: "awesome swift")
print(s) // 출력값: Hello, Swift
// 대소문자 구별없이 문자열을 비교하고 싶을땐 옵션 추가
s = str.replacingOccurrences(of: "swift", with: "awesome swift", options: [.caseInsensitive])
print(s) // 출력값: Hello, awesome swift
remove: 문자열 삭제
var str = "Hello, Awesome Swift!!!"
let lastCharIndex = str.index(before: str.endIndex)
// 해당 인덱스의 문자를 지우고 return 해줌
var removed = str.remove(at: lastCharIndex)
print(removed) // 출력값: !
print(str) // 출력값: Hello, Awesome Swift!!
removeFirst: 첫번째 문자 삭제
removed = str.removeFirst()
print(removed) // 출력값: H
print(str) // 출력값: ello, Awesome Swift!!
removed = str.removeFirst(2)
// Error: 첫번째 인덱스부터 2개 문자 삭제, 삭제한 문자를 return하지 않기 때문에 에러발생
str.removeFirst(2)
print(str) // 출력값: lo, Awesome Swift!!
removeLast: 마지막 문자 삭제
var str = "Hello, Awesome Swift!!!"
str.removeLast()
print(str) // 출력값: Hello, Awesome Swift!!
str.removeLast(2)
print(str) // 출력값: Hello, Awesome Swift
removeSubrange: 문자 범위로 검색해서 삭제
var str = "Hello, Awesome Swift!!!"
if let range = str.range(of: "Awesome"){
str.removeSubrange(range)
print(str) // 출력값: Hello, Swift!!!
}
removeAll: 전체 삭제
var str = "Hello, Awesome Swift!!!"
str.removeAll()
print(str) // 출력값:
// 메모리공간도 삭제됨
str.removeAll(keepingCapacity: true)
// 메모리공간은 삭제하지않음
// 다시 비슷한 길이의 문자열을 저장할거라면 삭제하지않는게 메모리의 오버헤드를 방지할 수 있음
dropFirst: 첫번째 문자부터 삭제
dropLast: 마지막 문자부터 삭제
var str = "Hello, Awesome Swift!!!"
// 원본을 바꾸지 않음
var substr = str.dropLast()
print(substr) // 출력값: Hello, Awesome Swift!!
print(str) // 출력값: Hello, Awesome Swift!!!
print(str.dropLast(3))
// 출력값: Hello, Awesome Swift
print(str.dropFirst(2))
// 출력값: llo, Awesome Swift!!!
drop(while:): 클로저를 Character로 받아서 클로저가 true를 return 하는동안 계속 문자를 빼고 false이면 남아있는 문자를 return함
print(str.drop { $0 != ","})
// 출력값: , Awesome Swift!!!
contains: 파라미터로 전달한 문자열이 포함되어있다면 true를 return함
str.contains("Hello") // 출력값: true
str.contains("hello") // 출력값: false
// 문자는 대소문자를 구분하기 때문에 구분없이 포함되어있는지 확인하려면 전부 소문자로 바꾼 뒤 확인
str.lowercased().contains("hello") // 출력값: true
commonPrefix: 두 문자열에서 공통된 부분만 찾아서 새로운 문자열로 return함
let str2 = "Hello, Programming"
var common = str.commonPrefix(with: str2)
print(common) // 출력값: Hello,