Swift

String Editing

dion_K 2020. 11. 19. 02:08
728x90

안녕하세요:) 꾸벅 

 

이번에는 String Editing에 대해서 알아보도록 하겠습니다.

문자열을 추가, 삭제, 변경하는 방법에 대해서 알아보겠습니다~

 

1. 문자열 추가

새로운 문자열을 추가할 때는 어떻게 해야 할까요?

코드를 통해서 보도록 하겠습니다.

var str = "Hello"
str += "!"
print(str) // Hello!

 

이런 방식도 있지만 메소드를 활용해서 추가하는 방법이 효율적입니다.

append와 appending을 사용해서 추가해보도록 하겠습니다.

str = "Hello"
str.append(", Swift")
print(str) // Hello, Swift

str = "Hello" // 문자열 초기화
str.appending(", Swift") // Hello, Swift
print(str) // Hello

 

위의 코드를 보면 append와 appending을 활용해서 추가해보았습니다.

그런데 이 둘의 차이가 보이시죠?

append를 사용해서 출력하면 새로운 문자열을 리턴하고 있고, appending은 String을 리턴합니다.

append는 값을 리턴하지 않습니다. 대상 문자열을 직접 변경합니다. (원본을 변경합니다.)

 

appending은 String을 리턴하고, 대상 문자열을 직접 변경하지 않고 새로운 문자열을 리턴합니다. (원본을 변경하지 않습니다.)

 

다시 한번 확인해볼까요?

var strA = "Swift"

strA.append("!!!")
strA // Swift!!!

strA = "Swift"
strA.appending("!!!")
strA // Swift

appendingFormat은 원하는 포맷으로 구성된 문자열을 연결할 때 사용합니다.

var strB = "iPhone"
strB.appendingFormat("%@", "좋아!") // iPhone좋아!
strB // iPhone

마찬가지로 새로운 메모리를 리턴하고 원본은 그대로 유지됩니다.

 

< 문자열 중간에 추가 >

이번에는 문자열 뒤가 아닌 문자열 중간에 추가하는 방법을 알아보도록 하겠습니다.

 

문자열 중간에 추가할 때는 insert 메소드를 사용해서 추가합니다.

var str = "iPhone iMac"

str.insert(",", at: str.index(str.startIndex, offsetBy: 6))
str // // iPhone,iMac

str.insert(contentsOf: "!!", at: str.index(str.startIndex, offsetBy: 6))
str // iPhone!!, iMac

2. 문자열 변경

문자열을 바꿀 때는 replace 메소드를 사용합니다.

var str = "iPhone, iMac, iPad"

if let range = str.range(of: "iMac") {
    str.replaceSubrange(range, with: "Air Pod")
} // iPhone, Air Pod, iPad

if let range = str.range(of: "iPhone") {
    str.replacingCharacters(in: range, with: "MacBook")
} // MacBook, Air Pod, iPad

str // iPhone, Air Pod, iPad
str.replacingOccurrences(of: "iPhone", with: "MacBook") // MacBook, Air Pod, iPad

str.replacingOccurrences(of: "iphone", with: "Air Pod Pro", options: [.caseInsensitive]) // Air Pod Pro, Air Pod, iPad , 대소문자를 구분하지 않도록 옵션을 추가했습니다.

3. 문자열 삭제

문자열을 삭제할 때는 remove 메소드를 사용합니다.

var str = "Drink coffee"

str.remove(at: str.startIndex) // D
str.remove(at: str.index(str.startIndex, offsetBy: 2)) // n
str.remove(at: str.index(before: str.endIndex)) // e
str // rik coffe

str = "Drink coffee"
str.removeFirst() // 첫 번째 문자를 삭제하고 삭제한 문자를 리턴해줍니다. D
str.removeFirst(2) // 정해준 갯수만큼 앞에서 삭제하고 문자열을 리턴해줍니다. nk coffee
str.removeLast() // 마지막 문자를 삭제하고 삭제한 문자를 리턴해줍니다. e
str.removeLast(2) // 정해준 갯수만큼 뒤에서 삭제하고 문자열을 리턴해줍니다. nk cof

// 특정 단어 삭제, 범위 삭제

var strA = "iPhone Pro Max"

if let range = strA.range(of: "Max") {
    strA.removeSubrange(range)
} // iPhone Pro


if let range = strA.range(of: "pro") {
    strA.removeSubrange(range)
    print("success")
} else {
    print("fail")
} // fail
// 문자열은 대소문자를 구분하기 때문에 fail이 출력되었습니다.
// 대소문자를 구분하지 않도록 옵션을 추가해 보겠습니다.

if let range = strA.range(of: "pro", options: [.caseInsensitive]) {
    strA.removeSubrange(range)
    print("success")
} else {
    print("fail")
} // success

strA = "iPhone Pro Max"
strA.removeAll() // 문자열을 다 지우고 빈 문자열로 리턴합니다.
strA.removeAll(keepingCapacity: true) // 메모리 공간은 삭제되지 않습니다.

var strB = "Hello"
strB.dropLast() // 마지막 문자를 삭제하고 원본 문자열의 메모리 공간을 공유합니다.
strB.dropFirst()
728x90