문자열과 숫자 변환 (toIntOrNull, toInt)

문자열(String) → 숫자(Int)

Kotlin은 String 클래스에 toIntOrNull() 확장 함수를 정의하며, 이를 사용하면 모든 문자열을 숫자형(Int)으로 변환할 수 있습니다. 이름에서 알 수 있듯이 변환할 수 없는 문자열의 경우 null 을 반환합니다.

Kotlin은 String 클래스에 toIntOrNull() 확장 함수를 정의하고 있으며, 이를 사용하면 임의의 문자열을 숫자형(Int)으로 변환할 수 있다. 함수명에서 알 수 있듯이 변환할 수 없는 문자열의 경우 null을 반환한다.

val num1 = "100".toIntOrNull()  // 100
val num2 = "abc".toIntOrNull()  // null

String#toIntOrNull()의 파라미터에는 기수(radix)를 지정할 수 있어서, 아래와 같이 2진수 표기나 16진수 표기의 문자열을 구문 분석할 수도 있다.

val num1 = "10000000".toIntOrNull(2)  // 128
val num2 = "FFFF".toIntOrNull(16)     // 65535
val num3 = "0xFFFF".toIntOrNull(16)   // null

위의 결과에서 알 수 있듯이, 16진수 표기 문자열에 접두사로 0x가 붙으면 toIntOrNull()null을 반환한다는 점에 주의해야 한다.

비슷하게 String.toInt()가 있는데, 이 함수는 구문 분석에 실패하면 null을 반환하는 대신 NumberFormatException이 발생한다. 필요에 따라 구분하여 사용하자.

try {
    val num = "xyz".toInt()
    println(num)
} catch (ex : NumberFormatException) {
    System.err.println(ex)
}

숫자(Int) → 문자열(String)

Int.toString(radix)를 사용하면 숫자(Int)를 임의의 기수 문자열 표현으로 변환할 수 있다.

val num = 255
println(num.toString(2))   // "11111111"
println(num.toString(8))   // "377"
println(num.toString(16))  // "ff"

Java의 Integer 클래스에 있는 toBinaryString, toOctalString, toHexString과 유사하게 사용할 수 있지만, 음수를 지정하면 결과가 달라진다는 점에 주의해야 한다.

val num = -255
println(num.toString(2))   // "-11111111"
println(num.toString(8))   // "-377"
println(num.toString(16))  // "-ff"
println(Integer.toBinaryString(num))  // "11111111111111111111111100000001"
println(Integer.toOctalString(num))   // "37777777401"
println(Integer.toHexString(num))     // "ffffff01"



최종 수정 : 2023-12-17