[Swift] split과 components (feat. 문자열 처리)
👨🏻‍💻iOS 공부/iOS & Swift

[Swift] split과 components (feat. 문자열 처리)

728x90
반응형

문자열을 다룰 때 주로 쓰는 메서드들을 살펴보자. 

 

Split(separator : )

separator를 인자로 하여 받은 값을 기준으로 대상 문자열을 나눈다. 

예를 들어서 "this is a remote controller"를 " "(공백)으로 나눈다고 할 경우 ["this" "is" "a" "remote" "controller"] 를 결과로 얻게 된다. 

var s = "this is a remote controller"
var splited = s.split(separator: " ")
print(splited) // ["this" "is" "a" "remote" "controller"]

이렇게 공백을 빼고 반환해준다는게 장점이다. 

하지만! [Substring]으로 반환되어 바로 사용하기에는 껄끄러운 부분이 있다. 

 

만약 공백이 두 칸일 경우엔 어떨까? 

var s = "  this  is  a  remote  controller  "
var splited = s.split(separator: " ")
print(splited) // ["this" "is" "a" "remote" "controller"]

이상없이 그대로 반환된다!

 

separator에 공백이 아닌 문자열이 들어가면 어떨까?

var s = "this is powerful pineapple"
print(s.split(separator: "p")) // ["this is ", "owerful ", "inea", "le"]

보면 p가 모두 잘 빠진 것을 볼 수 있다. 

특히 p를 3개나 포함하던 pineapple에서는 첫 번째 p를 제외한 inea까지, 그리고 중간의 p 2개를 제외하고 le가 붙어 나온 것을 볼 수 있다.

즉 개수에 관계없이 모두 삭제하고, 값이 있는 부분만 리턴하는 것이다. 

 

 

Components(separatedBy: )

이 메서드 또한 문자열을 나눌 때 사용하는데, 반환값이 [String]이어서 바로 사용하기 좋다는 점이 있다. 

split과의 차이점으로는 구분자를 1개만 삭제하고 그대로 결과에 반환한다는 것인데, 실 사용 사례를 보면 이해가 빠를 것이다. 

아래 문자열은 공백이 모두 2칸이다. 

 

var s = "  this  is  a  remote  controller  "
var components = s.components(separatedBy: " ")
print(components) // ["", "", "this", "", "is", "", "a", "", "remote", "" "controller", "", ""]

자세히 보면 문자열 사이에 있던 공백만 1개씩 줄어들고, 문자열의 앞뒤 부분은 제대로 처리가 되지 않은 것을 볼 수 있다. 

 

separatedBy에 문자열을 받으면 어떻게 될까? 

var s = "this is powerful pineapple"
print(s.components(separatedBy: "p")) // ["this is ", "owerful ", "inea", "", "le"]

응? 

 

아까 split에서는 ""와 같은 공백은 나오지 않았었다. 

즉, pp와 같이 붙어있을 때에는 두 개를 지우되, 흔적을 남기게 된다. 

아까 위에서도 문자열 사이의 공백 두 칸을 한 칸만 놔두고 반환한 것과 같은 모습니다. 


더 많은 차이점이 있겠지만 이 정도가 사용하는 부분에 있어서 큰 요소인 것 같다. 그러니 상황에 맞게 잘 선택하여 사용하는 것이 중요하다!

 

구분자가 n개 이상이어도 모두 지우고, 원하는 문자열만 깔끔하게 얻고 싶다면 > split

구분자가 1개만 지워지지만, 나머지는 처리하고, 바로 반환되는 결과를 사용하고 싶다면 > components

 

이정도가 되지 않을까 싶다!

728x90
반응형