Kotlinで文字列をLongに変換する方法は?


157

したがって、次のようなメソッドがないため Long.valueOf(String s)私が行き詰まっている。

Kotlinで文字列をLongに変換する方法は?

回答:


153

1。 string.toLong()

文字列を[Long]数として解析し、結果を返します。

@throws NumberFormatException-文字列が数値の有効な表現でない場合。

2。 string.toLongOrNull()

文字列を[Long]の数値として解析し、結果を返すnull か、文字列が数値の有効な表現でない場合に返します。

3。 str.toLong(10)

文字列を[Long]数として解析し、結果を返します。

@throws NumberFormatException-文字列が数値の有効な表現でない場合。

@throws IllegalArgumentException [radix]が文字列から数値への変換に有効な基数でない場合。

public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))

4。 string.toLongOrNull(10)

文字列を[Long]の数値として解析し、結果を返すnull か、文字列が数値の有効な表現でない場合に返します。

@throws IllegalArgumentException [radix]が文字列から数値への変換に有効な基数でない場合。

public fun String.toLongOrNull(radix: Int): Long? {...}

5。 java.lang.Long.valueOf(string)

public static Long valueOf(String s) throws NumberFormatException

1
eyval、alee bood
DolDurma

94

String 対応する拡張メソッドがあります:

"10".toLong()

1
名前はKotlinに変更されている、あなただけのすべてのことをKotlinに知っている、どこか、なぜ心配する必要はありませんString拡張機能を持っているtoLong()だけでなくtoInt()、他。これらを使用できます。たぶん@ilyaはこの回答を現在のKotlinに更新できます(jet.String参照を削除します)
Jayson Minard

数字の文字列を繰り返し処理している場合、それらは文字であり、[char] .toInt()はASCII表現を提供します。
Peheje 2017

58

Stringsが他のプリミティブ型に解析するための拡張メソッドが利用可能です。以下の例:


2
str.toLongOrNull()また、入力が正しくフォーマットされることが保証できない場合は、他の同様の名前のメソッドも役立ちます。これを使用すると、次のようなことができますstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
sotrh

9

注:言及されてjet.Stringいる回答は古くなっています。現在のKotlin(1.0)は次のとおりです。

StringKotlinのいずれにも、呼び出し可能な拡張関数がすでにありますtoLong()。特別なことは必要ありません、それを使用してください。

のすべての拡張関数Stringが文書化さています。あなたはAPIリファレンスで標準ライブラリの他のものを見つけることができます


7

それは面白い。このようなコード:

val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);

この出力を行います:

2
true

この場合、Kotlinはjava.lang.Long長いプリミティブからの変換をkotlin.Long自動的に行うと思います。したがって、それは解決策ですが、java.langパッケージを使用しないツールが見られれば幸いです。


6

実際には、「long」が有効であることを確認する必要がある時間の90%が有効であるため、次のものが必要です。

"10".toLongOrNull()

基本タイプの「toLong」ごとに「orNull」に相当するものがあり、Kotlinを使用して無効なケースを管理できますか?熟語。


同意した。ほとんどの場合、.toLongOrNull()が必要です。
Andrej 2017


0

答えで言及されていない古き良きJavaの可能性の1つは、ですjava.lang.Long.decode(String)


10進数文字列:

Kotlin String.toLong()はJavaと同等Long.parseLong(String)です。

文字列引数を符号付き10進数のlongとして解析します。...結果のlong値が返されます。引数と基数10がparseLong(java.lang.String, int)メソッドへの引数として指定された場合とまったく同じです。


10進数以外の文字列:

Kotlin String.toLong(radix: Int)はJavaのeLong.parseLong(String, int)と同等です。

2番目の引数で指定された基数で、文字列引数を符号付きlongとして解析します。文字列内の文字はすべて、指定された基数の数字でなければなりません ...

そして、ここにjava.lang.Long.decode(String)写真に入ります:

文字列をLongにデコードします。次の文法で与えられる10進数、16進数、および8進数を受け入れます:DecodableString:

(符号)DecimalNumeral | (符号)0x HexDigits | (符号)0X HexDigits | (符号)#HexDigits | (符号)0 OctalDigits

サイン:-| +

つまり、decodeのような文字列を解析することができ"0x412"、他の方法は、になります、NumberFormatException

val kotlin_toLong010 = "010".toLong() // 10 as parsed as decimal
val kotlin_toLong10 = "10".toLong() // 10 as parsed as decimal
val java_parseLong010 = java.lang.Long.parseLong("010") // 10 as parsed as decimal
val java_parseLong10 = java.lang.Long.parseLong("10") // 10 as parsed as decimal

val kotlin_toLong010Radix = "010".toLong(8) // 8 as "octal" parsing is forced
val kotlin_toLong10Radix = "10".toLong(8) // 8 as "octal" parsing is forced
val java_parseLong010Radix = java.lang.Long.parseLong("010", 8) // 8 as "octal" parsing is forced
val java_parseLong10Radix = java.lang.Long.parseLong("10", 8) // 8 as "octal" parsing is forced

val java_decode010 = java.lang.Long.decode("010") // 8 as 0 means "octal"
val java_decode10 = java.lang.Long.decode("10") // 10 as parsed as decimal

0

Kotlin 1.3でa StringLong(64ビット符号付き整数を表す)に変換するのは非常に簡単です。

次の3つの方法のいずれかを使用できます。

val number1: Long = "789".toLong()
println(number1)                                   // 789

val number2: Long? = "404".toLongOrNull()
println("number = $number2")                       // number = 404

val number3: Long? = "Error404".toLongOrNull()    
println("number = $number3")                       // number = null

val number4: Long? = "111".toLongOrNull(2)
println("numberWithRadix(2) = $number4")           // numberWithRadix(2) = 7

0

NumberFormatException解析中に処理したくない場合

 var someLongValue=string.toLongOrNull() ?: 0

0

実際には、いくつかの方法があります。

与えられた:

var numberString : String = "numberString" 
// number is the Long value of numberString (if any)
var defaultValue : Long    = defaultValue

それから私達は持っています:

+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ?            |  true    | false                 |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong()                       |  number  | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull()                 |  number  | null                  |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue |  number  | defaultValue          |
+—————————————————————————————————————————————+——————————+———————————————————————+

どのようにしてdefaultValue = Long:defaultValueとすることができますか。
James Smith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.