swift 문자열 앞뒤 잘라내기trimmingCharacters(in: )

임혜정·2024년 7월 7일
0
import Foundation

let name = "+/..hyejeong../+"
let trimmingName = name.trimmingCharacters(in: CharacterSet(charactersIn: "./+"))
print(trimmingName)
// 출력: hyejeong

trimmingCharacters(in:)

string타입에 사용할 수 있다. 잘라내져야 할 부분이있거나 공백을 없애줘야한다거나 기타 등등 in: 매개변수를 받아서 사용가능하다.

⭐️특징은 문자열의 시작과 끝에서만 적용된다는 것이다.

import Foundation

let name = "+/..hye..jeong../+"
let trimmingName = name.trimmingCharacters(in: CharacterSet(charactersIn: "./+"))
print(trimmingName)
// 출력: hye..jeong

트리밍은 표준 라이브러리에서 제공되는 문자열 타입 메서드이다. (foundation 프레임워크).


기본적으로 정의되어있는 (in:)에 사용되는 매개변수들(문자타입)

.decimalDigits

모든 10진수를 포함

let 앞뒤숫자를제거해야할문자 = "123hello123"
let 제거 = 앞뒤숫자를제거해야할문자.trimmingCharacters(in: .decimalDigits)
print(제거)
// 출력: hello

.urlHostAllowed:

URL host를 구성할 수 있는 문자

import Foundation

let urlString = "#@!example.com#@!"

// 앞뒤의 URL 호스트에 허용되지 않는 문자 제거
let 트리밍URL = urlString.trimmingCharacters(in: CharacterSet.urlHostAllowed.inverted)

print(트리밍URL) // "example.com"
  1. "#@!example.com#@!" 은 URL 호스트에 허용되지 않는 문자를 포함하고 있어서 제거해줘야 한다.
  2. 매개변수 부분, CharacterSet.urlHostAllowed는 URL 호스트에 들어갈 수 있는 문자집합이고 거기에 .inverted를 사용해서 허용되지 않는 문자집합을 생성한다.
  3. 그 조건으로 상수 트리밍URL을 잘라내면 "example.com"를 출력한다
    .
    .
    .

이 외에 공백, 대문자, 소문자 등 굉장히 많은 문자셋이 정해져있다.


사용자 정의

내 마음대로 앞뒤로 잘라내야할 조건을 정할 수도 있다.

extension CharacterSet {
    static let star : CharacterSet = {
        return CharacterSet(charactersIn: "⭐️")
    }()
}

let string = "⭐️별 이모지 좀 없애줘⭐️"
let 없애드리겠습니다 = string.trimmingCharacters(in: .star)
print(없애드리겠습니다)
//출력 : 별 이모지 좀 없애줘

removeAll, removeFirst+removeLast의 사용과 다른점은?

문자열의 양쪽 끝에서 특정 문자 집합에 포함된 문자를 제거하는 데 사용된다고 했다.

trimmingCharacters(in:)removeAll, removeFirst, removeLast보다 더 효율적인 가상상황을 만들어본다.

상황: 문자열의 양쪽 끝에서 공백 및 특정 기호,문자를 제거해야하는 경우

trimmingCharacters(in:) 사용할 경우

import Foundation

let input = "!! Hello, World !! "
let trimmed = input.trimmingCharacters(in: CharacterSet(charactersIn: "! ").union(.whitespaces))

print(trimmed) // "Hello, World"

removeAllremoveFirst + removeLast 사용할 경우

  1. removeAll은 문자열의 특정 문자 전체를 제거하는 데 사용되기 때문에 이 상황에 적합하지 않고 문자열의 중간에 있는 문자도 제거해버린다

  2. removeFirst + removeLast를 사용하는 예제:

import Foundation

var input = "!! Hello, World !! "

// 앞쪽 공백 및 특정 기호 제거
while input.first == "!" || input.first == " " {
    input.removeFirst()
}

// 뒤쪽 공백 및 특정 기호 제거
while input.last == "!" || input.last == " " {
    input.removeLast()
}

print(input) // "Hello, World"

비교 및 설명

  1. trimmingCharacters(in:)는 한 줄의 코드로 특정 문자 집합을 제거할 수 있어, 더 간결하고 가독성이 좋은 반면
    removeFirst + removeLast는 반복문을 사용하여 일일이 문자를 제거해야해서 코드가 복잡해진다

  2. trimmingCharacters(in:)는 내부적으로 최적화되어 있기 때문에 문자열의 양쪽 끝에서 문자를 한 번에 제거할 수 있는 반면에
    removeFirst + removeLast는 반복문을 통해 문자를 하나씩 제거해야 하므로 상대적으로 비효율적이다

  3. trimmingCharacters(in:)CharacterSet을 사용하여 다양한 문자 집합을 쉽게 처리할 수 있지만 removeFirst+removeLast`는 특정 문자에 대해서만 반복문을 작성해야 한다.

결론

문자열의 양쪽 끝에서 특정 문자 집합을 제거하는 작업은 trimmingCharacters(in:)를 사용하는 것이 훨씬 효율적이고 적합하다

profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️

0개의 댓글