티스토리 뷰

Swift

Swift3 ) String쪼개기

Zedd0202 2017. 5. 29. 17:22
반응형

안녕하세요 ㅎㅎ

이 글에서 스트링을 어떤 기준에 따라 쪼개는 법을 배워보았어요.

간단하게 요약하자면, components라는 함수로 기준을 파라미터로 주면 쪼개진 배열을 리턴해주는 것이죠.

이런 방법을 통해서

" "를 파라미터로 주어, 1 2 를 입력을 하면 [1, 2]를 리턴받았죠.


하지만, 이 외에도 다양한 경우가 있을 수 있어요.


오늘은 String을 쪼개는 방법을 알아보려고해요.





String 쪼개기



1. components(separatedBy: " ")


이거는 많이 봤죠? 제가 String을 이방법으로만 쪼갰답니다. 

예제를 통해 알아볼게요. 


import Foundation


var str =  "Hello Zedd!"

var arr =  str.components(separatedBy: " ")

print(arr)

 components함수는 결과로 '배열'을 리턴해준답니다. 그래서 arr라고 이름을 줘보았어요. 

그냥 정말 직관적으로 생각하시면 된답니다. components의 파라미터로 separatedBy가 있죠? 

딱봐도.. 이걸로 나눠줘!!라는 소리 같네요. 

그럼 결과가 어떻게 나올까요? 


짠! 정말로 '배열'이 나왔죠? 

그럼 원래 String인 str변수는 어떻게 되었을까요?


똑같은게 보이시죠 ㅎㅎ? str에는 아무 영향을 주지 않는답니다.

음.. str을 조금 바꿔볼까요?

var str =  "1+2-3*4/5"

자. str에 뭐가들어갔나요?? 식이 들어갔는데 정말 복잡하네요 ㄷㄷ

어떤 경우에는 저 숫자들만 가져오고 싶을때가 있겠죠?

그럴때 separeatedBy파라미터에 뭘 줘야 할까요?

"+"? 아니면.."-"? 파라미터로 넣어주고 싶은 기호가 많죠?

components에는 파라미터를 여러개 넣어줄 수 있답니다!!

바로 



import Foundation


var str =  "1+2-3*4/5"

var arr =  str.components(separatedBy: ["+","-","*","/"])

print(arr)

바로 이렇게요!! 하지만, "+","-","*","/"를 []괄호로 반드시 묶어줘야 한답니다. 결과를 볼까요?



짠~~ 잘 나온게 보이시나요 ㅎㅎ


만약에 진짜 저 식을 '계산'해야 한다고 가정해볼게요.

그럼 저 숫자들끼리 어떤 '연산'을 해야겠죠?

하지만

(연산 우선순위를 생각하지 않고 설명드리겠습니다.)

만약 배열의 첫번째 원소인 "1"과, 배열의 두번째 원소인 "2"를 더해볼게요.

우리가 생각한 3이 아니라 12라는 값이 나왔네요..저건 1과 2를 진짜 더한것이 아닌, String으로 만들어주는 작업을 한거에요. 말그대로 Concatenating이죠.

왜 이런 결과가 나온 것일까요? 

네. components는 [String]형을 리턴하기 때문에, 배열의 원소는 Int형이 아닙니다. 그래서 당연히 덧셈이 안되는 것이죠.

그럼 이 배열을 Int형 배열로 바꾸면 덧셈이 잘 되겠네요?

이전글에서 배운 map을 사용해볼까요? 


import Foundation


var str =  "1+2-3*4/5"

var arr =  str.components(separatedBy: ["+","-","*","/"]).map { (value:String) -> Int in return Int(value)! }


print(arr[0]+arr[1])


축약은 하지 않았어요...ㅎㅎ

자, 그럼 결과는??



짠~~~

ㅎㅎ

components 함수. 정말 쉽지 않나요? map과 같이쓰면 정말 편한 것 같아요 XD

그럼 String을 쪼개는 두번째 방법으로 넘어가볼게요.



2.split(separator: " ")


스플릿!! 뭔가 이름만 봐도 ㄷㄷ.. 뭘 쪼갤 것 같네요..바로 split의 파라미터인 separator로요.

이 split의 사용방법을 알려드릴게요.


import Foundation


var str =  "Hello Zedd"

var arr = str.characters.split(separator: " ").map { (value) -> String in

    return String(value) }

print(arr)

역시 축약은 하지 않았습니다. 뭔가 components랑 비슷해보이지 않나요?

다만, components는 스트링하고 .을 찍으면 바로 components메소드가 나왔지만,  split은  characters라는 곳에 있는 메소드네요.

제가 많이 실험을 해봤는데.. 

split에서는 저렇게 map작업을 해주지 않으면 이상하게 나온답니다..이유는 정말 모르겠어요 ㅠㅠ


....


components때는, 


이랬는데 말이죠..

아무튼 split을 쓸때는 꼭 map으로 처리를 해주자는 것!!!!






3. indices


이제까지는 뭔가 어떤 기준으로 나누어보았죠? 이번엔 그냥 아무 기준없이 한 String을 하나의 Character로 분해해볼게요.



import Foundation


var str =  "Hello Zedd"


for index in str.characters.indices {

    print(str[index])

}


결과는 어떻게 될까요?


짠 ㅎㅎ

indices방법 말고, 


import Foundation


var str =  "Hello Zedd"


for index in str.characters{

    print(String(index))

}

이런 방법도 있답니다. 하지만 이방법을 쓰게되면 str을 직접 접근할 수 없게돼요 ㅠㅠ 그리고 String으로 꼭 캐스팅을 시켜줘야 한답니다!! 주의하세요!





자.. 이렇게 Swift에서 String을 쪼개는 여러가지 방법을 알아보았는데.. 어떠셨나요 ㅎㅎ

어렵기도 하고 헷갈리기도 하죠 ㅠㅠ? 저도 이게 될 것 같은데 왜 안되지..하는게 참 많아요 

더 공부 열심히해야겠어요..

다음에는 String join하는방법들에 대해서 써볼 생각이에요 

핳ㅎㅎ


아무튼 이 글이 도움이 되었으면 좋겠어요XD 


반응형