본문 바로가기
Swfit

Substring 표현방법

by GGShin 2022. 12. 2.

String을 잘라서 원하는 만큼만 표현하고 싶을 때, 어느 위치까지 자를 것인지 index를 이용해서 substring을 만들 수 있습니다.

예를 들어서, "2022-12-31T04:10:30.345784" 를 T 앞까지 잘라서 "2022-12-31"만 표현하고 싶다면 어떻게 할 수 있을까요?

 

다양한 방법이 있겠지만, 최근에 알게된 방법은 마치 Array의 원소를 가져오듯이 []를 사용해서 substring을 만드는 방법이 이었습니다.

[]안에는 index range를 넣어주면 됩니다.

 

저는 날짜 형식의 String에서 앞부분 연월일만 빼내고 싶어서 방법을 찾던 중 알게 되었습니다.

let createdDate = "2022-12-31T04:10:30.345784"
let endIndex = createdDate.firstIndex(of: "T")!
let slicedDate = createdDate[..<endIndex]

먼저, T가 있는 부분의 index를 알기 위해서 firstIndex(_:)를 사용해 주었습니다. 그리고 endIndex 변수에 해당 index를 담아주었습니다.

제가 원하는 Substring은 endIndex 보다 하나 앞까지만 잘라야 하므로 range를 표현할 때 "..<"를 사용해서 T의 index는 포함되지 않게 잘리도록 하였습니다. 이렇게 하면 원하는 대로 연월일 부분만 추출된 형태가 나오게 됩니다.

2022-12-31

 

만약에 T까지 포함하고 싶다면 range에 "..."를 사용하면 됩니다. 

let slicedDate = createdDate[...endIndex]
//2022-12-31T

range는 Int가 아니라 String.Index type입니다. 그냥 숫자를 넣으면 컴파일 에러가 발생합니다. 그렇기 때문에 Swift에서 제공하는 String.Int type을 반환하는 function을 잘 이용해서 범위를 지정해주어야 합니다. 

 

Swift에서는 첫번째 인덱스와 마지막 인덱스를 구하는 function이 내장되어 있습니다. 그리고 특정한 index의 문자의 String.Index를 구하는 function도 있습니다. 이런 도구들을 잘 활용해주면 원하는 range를 만들어 낼 수 있습니다.

예를 들어서, 특정 String의 2번 인덱스에 위치한 문자부터 부터 마지막 인덱스 문자까지 자르고 싶다면 아래처럼 해볼 수 있습니다.

마지막 인덱스는 swift에서 제공하는 endIndex()를 사용하면 바로 구할 수 있습니다. 

 

createdDate.endIndex

 

그렇다면 2번 인덱스에 위치한 문자의 String.Index는 어떻게 구할 수 있을까요? 바로 index(_ i:, offsetBy:)를 사용하면 됩니다. 

i 파라미터에는 첫번째 인덱스를 표현해주는 startIndex()를 넣어주고, 2번 인덱스에 있는 문자를 원하므로 offsetBy에 2를 넣어줍니다.

 

let midIndex = createdDate.index(createdDate.startIndex, offsetBy: 2)

 

이렇게 하면 createdDate 변수에 담긴 문자열의 2번째 인덱스 값이 나옵니다. 

 

이 둘을 이용해서 아래처럼 slicing을 할 수 있습니다. 

createdDate[slicedDate..<createdDate.endIndex]
//index#2 부터 마지막 index까지를 의미

//22-12-31T04:10:30.345784

 

여기까지 간단하게 알아보았고, 

관련된 또 다른 내용을 알게되면 지속적으로 내용을 추가하려고 합니다 :)

감사합니다. 

 

 


참고자료

https://velog.io/@bibi6666667/Swift-String.Index-%EA%B7%B8%EB%A6%AC%EA%B3%A0-Substring-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0

 

[Swift] String.Index (그리고 Substring) - 문자열 다루기

애플 공식 문서Swift Standard Library > String > String.Indexhttps://developer.apple.com/documentation/swift/string/index/Swift Standard Library > Subst

velog.io

 

반응형