코딩

Swift String 자르기 본문

Swift

Swift String 자르기

ssooyn_n 2021. 6. 30. 02:45

Swif는 다른 언어와 달리 String자르기가 조금 귀찮다.

파이썬의 경우 string[1:3]을 하면 인덱스 1부터2까지의 문자열이 잘라지지만 Swift는 그러지 않는다.

 

String 자르기

Swift에서 String을 자르고 싶다면 이것만 기억하면 된다.

string.index(string.startIndex, offsetBy: number)

startIndex 즉 0 에서 number만큼 떨어진곳의 인덱스를 구한다는 뜻이다.

var str = "Hello, stranger"
let startIndex = str.index(str.startIndex, offsetBy: startingNumber)// 사용자지정 시작인덱스
let endIndex = str.index(str.startIndex, offsetBy: endingNumber)// 사용자지정 끝인덱스
var sliced_str = str[startIndex ..< endIndex]
print(sliced_str)

만약 "strange"만 출력하고 싶다면,

 

startingNumber = 7, endingNumber = 14로 설정하면 된다.

또한 str[startIndex ... endIndex]로 바꾼다면 endingNumber = 13이 되어야 "strange"를 출력할 수 있다.

 

지정 Index에서 String끝까지 자르기

var str = "Hello, stranger"
let startIndex = str.index(str.startIndex, offsetBy: 7)
let endIndex = str.index(str.startIndex, offsetBy: 13)
let range = ...endIndex
print(str[range])

마찬가지로 range = ..<endIndex로 설정해주면 Hello, strang 까지만 출력된다.

String처음에서 지정Index까지 자르기

var str = "Hello, stranger"
let startIndex = str.index(str.startIndex, offsetBy: 7)
let endIndex = str.index(str.startIndex, offsetBy: 13)
let range = startIndex...
print(str[range])

 

String의 처음과 끝

그렇다면 String의 처음과 끝은 어떻게 접근해야할까? 처음은 offsetBy를 0으로 끝은 string.length로 접근해야할까?

Swift는 이에 대한 기본메소드를 가지고 있다. swift는 항상 조금 특이한 부분에서 친절한거같다.

 

바로 startIndex와 endIndex 얘네들은 인덱스어쩌구를 해주지 않아도 해당 인덱스에 접근한다.

var str = "Hello, stranger"
print(str[str.startIndex]) // "H"

다만 endIndex에서 다시 안친절해지는데, 바로 endIndex는 문자열 마지막 + 1의 인덱스를 반환한다는것

파이썬의 string[-1]이 얼마나 감사한 접근방식이었는지 깨닫게되었다.

그래서 이걸 startIndex처럼 써준다? 

var str = "Hello, stranger"
print(str[str.endIndex])

그러면 이런화면을 볼 수 있다. 근데 또 str.endIndex - 1을 해준다고해서 원하고자 하는 값을 얻을 수 있는것도 아니다.

왜냐면

str.endIndex는 Int가 아니기때문!! 

Index로 얻는 모든 인덱스들은 정수가 아니다. 따라서 더할수도 비교할수도 없다.

 

그럼 도대체 얘네는 뭔데?

Swift만의 독자적인 스트링인덱스값이다.

얘네를 이렇게 만든이유는 애플홈페이지에 따르면,

Strings in Swift are Unicode correct and locale insensitive, and are designed to be efficient. 라고 한다.

 

var str = "Hello, stranger"
print(str[str.index(before: str.endIndex)])

그래서 endIndex전의 인덱스의 값을 출력하고 싶다면 이런식으로 접근하면 된다.

 

'Swift' 카테고리의 다른 글

Swift 공공데이터 parsing  (0) 2021.07.09
Swift combination구현  (0) 2021.07.01
Swift 딕셔너리에서 값 가져오기  (0) 2021.06.30
Xcode playground 사용하기 (+문제점)  (0) 2021.06.29
Comments