Jawaban:
1. string.toLong()
Parsing string sebagai angka [Panjang] dan mengembalikan hasilnya.
@mengirimkan NumberFormatException jika string bukan representasi angka yang valid.
2. string.toLongOrNull()
Parsing string sebagai angka [Panjang] dan mengembalikan hasilnya atau
null
jika string bukan representasi angka yang valid.
3. str.toLong(10)
Parsing string sebagai angka [Panjang] dan mengembalikan hasilnya.
@mengirimkan NumberFormatException jika string bukan representasi angka yang valid.
@throws IllegalArgumentException ketika [radix] bukan radix yang valid untuk konversi string ke angka.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Parsing string sebagai angka [Panjang] dan mengembalikan hasilnya atau
null
jika string bukan representasi angka yang valid.@throws IllegalArgumentException ketika [radix] bukan radix yang valid untuk konversi string ke angka.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
memiliki metode ekstensi yang sesuai:
"10".toLong()
String
memiliki fungsi ekstensi toLong()
serta toInt()
dan lainnya. Anda bisa menggunakan ini. Mungkin @ilya dapat memperbarui jawaban ini ke Kotlin saat ini (hapus jet.String
referensi.)
Metode ekstensi tersedia untuk String
mengurai mereka menjadi tipe primitif lainnya. Contoh di bawah ini:
str.toLongOrNull()
dan metode lain yang serupa juga berguna jika Anda tidak dapat menjamin bahwa input akan diformat dengan benar. Dengan ini, Anda dapat melakukan hal-hal sepertistr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Catatan: Jawaban yang disebutkan jet.String
sudah usang. Inilah Kotlin saat ini (1.0):
Apa pun String
di Kotlin sudah memiliki fungsi ekstensi yang dapat Anda hubungi toLong()
. Tidak ada yang istimewa diperlukan, gunakan saja.
Semua fungsi ekstensi untukString
didokumentasikan. Anda dapat menemukan orang lain untuk lib standar dalam referensi api
Ini menarik. Kode seperti ini:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
membuat output ini:
2
true
Saya kira, Kotlin membuat konversi dari java.lang.Long
dan lama primitif ke kotlin.Long
otomatis dalam kasus ini. Jadi, ini solusinya, tapi saya akan senang melihat alat tanpa penggunaan paket java.lang.
Sebenarnya, 90% dari waktu Anda juga perlu memeriksa 'panjang' itu valid, jadi Anda perlu:
"10".toLongOrNull()
Ada 'orNull' yang setara untuk setiap 'toLong' dari tipe dasar, dan ini memungkinkan untuk mengelola kasus yang tidak sesuai dengan Kotlin? idiom.
string.toLong ()
di mana string
variabel Anda.
Satu kemungkinan Jawa tua yang baik apa yang tidak disebutkan dalam jawaban adalah java.lang.Long.decode(String)
.
String Desimal:
Kotlin String.toLong()
setara dengan Java Long.parseLong(String)
:
Mengurai argumen string sebagai desimal yang ditandatangani . ... Nilai panjang yang dihasilkan dikembalikan, persis seperti jika argumen dan radix 10 diberikan sebagai argumen untuk
parseLong(java.lang.String, int)
metode ini.
String Non-desimal:
Kotlin String.toLong(radix: Int)
setara dengan eLong.parseLong(String, int)
Java :
Mem-parsing argumen string sebagai panjang yang ditandatangani di radix yang ditentukan oleh argumen kedua. Semua karakter dalam string harus merupakan digit dari radix yang ditentukan ...
Dan inilah java.lang.Long.decode(String)
gambarannya:
Memecah String menjadi Long. Menerima angka desimal, heksadesimal, dan oktal yang diberikan oleh tata bahasa berikut: DecodableString:
(Tanda) Angka Desimal | (Masuk) 0x HexDigits | (Masuk) 0X HexDigits | (Masuk) # HexDigits | (Masuk) 0 OctalDigits
Masuk: - | +
Itu berarti decode
dapat mem-parsing String seperti "0x412"
, di mana metode lain akan menghasilkan a 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
Untuk mengonversi a String
menjadi Long
(yang mewakili integer bertanda 64-bit) di Kotlin 1.3 cukup sederhana .
Anda dapat menggunakan salah satu dari tiga metode berikut:
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
Jika Anda tidak ingin menangani NumberFormatException
saat parsing
var someLongValue=string.toLongOrNull() ?: 0
Sebenarnya ada beberapa cara:
Diberikan:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Maka kita memiliki:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+