Swift - String(2_index)

이한솔·2023년 9월 16일
0

Swift 문법 🍎

목록 보기
22/32

String.Index

문자열에서 문자나 코드 유닛의 위치이다.
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


String Editing

문자열 더하기

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, 

0개의 댓글