1. 概要

このクイックチュートリアルでは、KotlinでStringLongに、またはその逆に変換するために使用できるさまざまなオプションを評価します。

2. 基本的な変換

文字列Longと同等のものに変換するには、 toLong()拡張関数を使用できます。

val number = "42".toLong()
assertEquals(42, number)

この拡張関数は、 String が有効な数値でない場合に、NumberFormatExceptionのインスタンスをスローします。

assertThrows<NumberFormatException> { "the answer is 42".toLong() }

toLong()とは対照的に、 toLongOrNull()拡張関数は、指定された文字列が有効な数値でない場合、nullを返します。

val number: Long? = "42".toLongOrNull()
assertEquals(42, number)

assertNull("the answer is 42".toLongOrNull())

上に示したように、この関数はスローされた例外をキャッチし、代わりにnullを返します。

3. 基数変換

10進数に加えて、 16進数、2進数、8進数などの他の数値システムの文字列をLongインスタンスに変換できます。 基数をtoLong(radix)または toLongOrNull(radix)関数に渡すだけです。

assertEquals(15, "f".toLong(16))
assertEquals(15, "F".toLong(16))
assertEquals(15, "17".toLong(8))
assertEquals(15, "1111".toLongOrNull(2))

同様に、指定された文字列が特定の記数法で有効な数値でない場合、 toLong(radix)は例外をスローします。 さらに、 toLongOrNull(radix)は、次の状況でnullを返します。

assertThrows<NumberFormatException> { "fg".toLong(16) }
assertNull("8".toLongOrNull(8))

16進数に「g」という文字を含めることはできません。8進数には[1、7]の範囲の数値しか含まれないため、どちらの例も無効な数値です。

4. 署名なしロング

Kotlin 1.3 以降、Kotlinは符号付き整数に加えて符号なし整数をサポートします。 もちろん、Stringをこれらの符号なし数値に変換することも可能です。

assertEquals(42uL, "42".toULong())

同様に、10進数以外のシステムをターゲットにすることができます。

assertEquals(15uL, "f".toULong(16))

さらに、署名されていない変換は、変換用の署名されたものと同じAPIを提供します。

assertEquals(15uL, "17".toULongOrNull(8))
assertNull("179".toULongOrNull(8))
assertThrows<NumberFormatException> { "179".toULong(8) }

符号なし整数はまだ実験的な機能であるため、 ExperimentalUnsignedTypes アノテーションを使用して、コンパイラの警告を抑制する必要があります。

5. 長いから文字列

StringLongに変換するだけでなく、反対方向に変換することもできます。 これを行うには、 toString()関数を使用できます。

assertEquals("42", 42.toString())

他の数値システムでは、10進数のLongを対応するStringに変換することもできます。

assertEquals("101010", 42.toString(2))
assertEquals("2a", 42uL.toString(16))

ここでは、符号なしおよび符号付きLongを2進数および16進数の表現に変換しています。

6. 結論

この短いチュートリアルでは、Long値を対応するString表現に、またはその逆に変換する方法を説明しました。 その過程で、Kotlin1.3で導入された新しい符号なし番号についても簡単に説明しました。

いつものように、すべての例はGitHubから入手できます。