[Kotlin] 마지막 인덱스를 '-1'로 참조할 수 없다?

hongsikkim·2022년 7월 12일
0

Kotlin

목록 보기
1/2

본인이 머신러닝에서 자주 쓰는 언어인 Python에서는 다음과 같이 배열이나 문자열의 마지막 인덱스를 참조할 수 있다.

>>> a = 'abcd'
>>> a[-1]
'd'

그래서 작업 도중 안드로이드 앱을 개발할 때 쓰는 언어인 Kotlin에서도 아마 그게 되겠지... 하고 생각해서, 다음과 같이 해 보았다. (실제 작업 코드와는 다르다)

아래 코드는 https://www.naver.com/에서 /으로 문자열을 나눈 것 중 www.naver.com에 해당하는 부분을 찾고, 그 부분에서 .으로 문자열을 나눈 것 중 마지막 값인 com을 반환하는 것이다.

fun main() {
    val string = "https://www.naver.com/"
    val com_error = string.split("/")[2].split(".")[-1]
    println(com_error)
}

그 결과,

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 3
 at jdk.internal.util.Preconditions.outOfBounds (:-1) 
 at jdk.internal.util.Preconditions.outOfBoundsCheckIndex (:-1) 
 at jdk.internal.util.Preconditions.checkIndex (:-1) 

위와 같은 오류가 발생했다.

즉, Kotlin에서는 이런 식으로 참조할 수 없다는 것이다.

그래서 코틀린에서 마지막 인덱스의 항목을 참조하려면, 어쩔 수 없이 다음과 같이 해당 배열이나 문자열의 길이를 직접 이용해야 한다.

fun main() {
    val string = "https://www.naver.com/"
    val com = string.split("/")[2].split(".")[string.split("/")[2].split(".").size-1]
    println(com)
}

그런데 이렇게 하면 코드 중복이 너무 심해진다. 그래서 이렇게 하는 것이 아마 최선일 것 같다.

fun main() {
    val string = "https://www.naver.com/"
    val naver = string.split("/")[2].split(".")
    val com_ = naver[naver.size-1]
    println(com_)
}
profile
딥러닝 덕후 가즈아

0개의 댓글