본인이 머신러닝에서 자주 쓰는 언어인 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_)
}