오랜만에 코딩문제를 풀다가 문자열을 잘라야 하는 경우가 발생했다. 껌이지.. 하고 시도했는데 자꾸만 컴파일 오류…
다른 언어랑 헷갈렸는지 swift는 문자열 자르기가 쉽지 않았다! 같은 실수를 하지 않기 위해 오늘의 주제는 문자열 자르기!
오늘도 잘 부탁드립니다 :)
git : 예제소스
String Slice
다른 언어보다 swift에서 slice가 쉽지 않은 이유는 string Value Type이기 때문입니다!
Reference Type 과 Value Type 의 차이를 아시는건 코딩하는데에도 필요하니 공부하는걸 권장드립니다!
String.Index 활용
swift에서 String은 구조체이며, 어떠한 문자열에 대해 “Hello World”[5] Int로 접근하면 오류가 발생합니다.
아래와 같이 String 내부의 Index를 활용해야 합니다.
let testString = "0123456789"
let startIndex = testString.startIndex // String.Index
let endIndex = testString.endIndex // String.Index
testString[startIndex..<endIndex] // "0123456789"
let numberTwoIndex = testString.index(testString.startIndex, offsetBy: 2)
let numberThreeIndex = testString.index(testString.startIndex, offsetBy: 3)
testString[numberTwoIndex...numberThreeIndex] // "23"
testString[numberTwoIndex...] // "23456789"
testString[...numberThreeIndex] // "0123"
type(of: testString[...numberThreeIndex]) //Substring.Type
헷갈리시면 안되는 점은 let startIndex = testString.startIndex 값의 타입은 String 내부의 Index라는 구조체입니다.
또한 반환 값은 Substring이라는 타입이네요… String으로 활용해야 할 경우 별도 반환이 필요하네요;;
문자열 길이에 맞는 Index 대입에 유의하셔야 합니다.
Array 활용
let arrayString = Array(testString) // ["0","1","2","3" .....]
String(arrayString[2...7]) // "234567"
String(arrayString[...7]) // 01234567
String(arrayString[2...]) // "23456789"
문자열을 Array로 변환 후 다시 String으로 변환하는 과정입니다.
마찬가지로 문자열 길이에 맞는 index 대입에 유의하셔야 합니다.
Prefix, Suffix 활용
testString.prefix(7) // "0123456"
testString.prefix(56) // "0123456789"
testString.suffix(3) // "789"
testString.suffix(100) // "0123456789"
type(of: testString.suffix(3)) //Substring.Type
String 함수 prefix 와 suffix를 활용하면, 원하는 범위를 자르진 못하지만, String 맨 앞 또는 맨 뒤에서 자를 순 있습니다!
위와 같이 문자열 길이가 넘는 값으로 호출하면 전체 문자열이 반환되네요…
Index 활용과 같이 반환 타입은 Substring 입니다.
알잘딱깔센으로 사용하면 될거 같으나… 왜 굳이 구현을 안해줬을까요??
프로젝트에서는 String 확장하여 구현해주는게 마음 편할거 같습니다.
정리
∙ 문자열 slice에 여러 방법 존재하나 과정에서 발생 값의 type에 유의
잘못 된 정보 및 요청사항은 댓글로 남겨주세요 ! 큰 도움과 힘이 됩니다
'알고리즘 & 문제풀이' 카테고리의 다른 글
프로그래머스 - L1 소수 찾기 (0) | 2023.02.06 |
---|---|
프로그래머스 - L1 콜라 문제 (0) | 2023.02.06 |
프로그래머스 - L1 크기가 작은 부분 문자열 (0) | 2023.02.04 |
자료구조 (0) | 2023.02.03 |
코딩 기술 - Comparable (0) | 2023.02.03 |