Kotlinで文字列を整数に変換する

文字列を整数に変換し、整数を文字列に変換する方法を紹介する。

文字列(String)から整数(Int)へ変換する

KotlinではStringクラスにtoIntOrNull()拡張関数が定義されており、任意の文字列を数値型(Int)に変換できる。名前のとおり、変換できない文字列の場合はnullを返す。

val num1 = "100".toIntOrNull()
val num2 = "xyz".toIntOrNull()

Output:

100
null

String#toIntOrNull()のパラメーターとして基数(radix)を指定できるため、次のように2進数表記や16進数表記の文字列も解析できる。

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

Output:

128
65535
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))
println(num.toString(8))
println(num.toString(16))

Output:

11111111
377
ff

JavaのIntegerクラスにあるtoBinaryStringtoOctalStringtoHexStringメソッドと似たように使えるが、負の値を指定すると結果が異なる点に注意する必要がある。

val num = -255
println(num.toString(2))
println(num.toString(8))
println(num.toString(16))
println(Integer.toBinaryString(num))
println(Integer.toOctalString(num))
println(Integer.toHexString(num))

Output:

11111111
-377
-ff
11111111111111111111111100000001
37777777401
ffffff01