프로그래밍/Kotlin

[Kotlin] 문자형을 숫자형으로 변경하기 (feat. char -> Int를 하려면?)

@코린이 2023. 11. 25. 20:00

Koltin에서 형변환은 직관적이다. 보통 to~() 방식으로 메소드명이 붙어있다. 자주 사용하는 메소드에는 toInt(), toLong(), toString() 등이 있다.

 

String to Number

fun main() {
    val i = "123"
    println(i.toInt())			// 123
    println(i.toLong())			// 123
}

 

String을 숫자형으로 형변환 한 결과이다.

 

Chat to Number

그런데 Chat 타입을 변환해보면 얘기가 달라진다.

형변환 실패

fun main() {
    val i = '1'
    println(i.toInt())			// 49
    println(i.toLong())			// 49
}

너무나도 당연히 1이 나올줄 알았으나 아니었다...

 

내부 코드를 확인해보니 1.5부터는 심지어 deprecated 된다고 나온다 ㅎㅎ

@Deprecated("Conversion of Char to Number is deprecated. Use Char.code property instead.", ReplaceWith("this.code"))
@DeprecatedSinceKotlin(warningSince = "1.5")
public fun toInt(): Int

 

내부 코드를 따라서 아래의 코드로 바꿔보았는데도 동일한 결과가 실행된다.

fun main() {
    val i = '1'
    println(i.code)				// 49
}

char를 바로 숫자형으로 형변환 하는 경우에는 우리가 기대한 바와는 달리 아스키코드를 반환하기 때문에 이런 결과가 나온다.

 

형변환 성공

원래는 Character.getNumericValue('1') 을 사용했지만, 1.5버젼 이후로는 digitToInt() 를 사용하여 원하는 값을 얻을 수 있다.

fun main() {
    val i = '1'
    // v1.5.0 이상
	println(i.digitToInt())		// 1
    // v1.5.0 미만
    println(Character.getNumericValue(i))	// 1
}