Yanıtlar:
1. string.toLong()
Dizeyi [Uzun] sayı olarak ayrıştırır ve sonucu döndürür.
Dize bir sayının geçerli bir temsili değilse @throws NumberFormatException.
2. string.toLongOrNull()
Dizeyi [Uzun] sayı olarak ayrıştırır ve sonucu döndürür veya
null
dize bir sayının geçerli bir temsili değilse.
3. str.toLong(10)
Dizeyi [Uzun] sayı olarak ayrıştırır ve sonucu döndürür.
Dize bir sayının geçerli bir temsili değilse @throws NumberFormatException.
@throws IllegalArgumentException, [radix] dizeden sayıya dönüşüm için geçerli bir radix olmadığında.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Dizeyi [Uzun] sayı olarak ayrıştırır ve sonucu döndürür veya
null
dize bir sayının geçerli bir temsili değilse.@throws IllegalArgumentException, [radix] dizeden sayıya dönüşüm için geçerli bir radix olmadığında.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
karşılık gelen bir uzantı yöntemine sahiptir:
"10".toLong()
String
için bir uzantı fonksiyonuna sahip olduğunu bilin . Bunları kullanabilirsiniz. Belki @ilya bu cevabı mevcut Kotlin'e güncelleyebilir ( referansı kaldır .)toLong()
toInt()
jet.String
String
Bunların diğer ilkel tiplere ayrıştırılması için genişletme yöntemleri mevcuttur . Aşağıdaki örnekler:
str.toLongOrNull()
ve girişin doğru biçimlendirileceğini garanti edemezseniz, benzer şekilde adlandırılmış diğer yöntemler de yararlıdır. Bununla şunları yapabilirsinizstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Not: jet.String
Belirtilen cevaplar güncel değildir. İşte mevcut Kotlin (1.0):
String
Kotlin'deki herhangi birinin arayabileceğiniz bir uzantı işlevi zaten var toLong()
. Özel bir şey gerekmez, sadece kullanın.
İçin tüm uzantı işlevleriString
belgelenmiştir. Api başvurusunda standart lib için başkalarını bulabilirsiniz
İlginç. Bunun gibi kod:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
bu çıktıyı yapar:
2
true
Sanırım, Kotlin bu durumda otomatik olarak java.lang.Long
uzun ve ilkel bir dönüşüm yapar kotlin.Long
. Yani, bu çözüm, ama java.lang paket kullanımı olmadan aracı görmek için mutlu olurdu.
Aslında, 'uzun' kontrol etmeniz gereken zamanın% 90'ı geçerlidir, bu yüzden ihtiyacınız olan:
"10".toLongOrNull()
Temel türlerin her bir 'toLong' için bir 'orNull' eşdeğeri vardır ve bunlar Kotlin'e uygun olarak geçersiz vakaların yönetilmesine izin verir mi? deyim.
string.toLong ()
string
değişkenin nerede .
İyi bir eski Java olasılığı cevaplarda belirtilmeyen şeydir java.lang.Long.decode(String)
.
Ondalık Dizeler:
Kotlin's String.toLong()
Java ile eşdeğerdir Long.parseLong(String)
:
Dize bağımsız değişkenini işaretli ondalık uzun olarak ayrıştırır . Sonuçta elde edilen uzun değer, tıpkı argüman ve sayı tabanı 10,
parseLong(java.lang.String, int)
yönteme argüman olarak verilmiş gibi döndürülür .
Ondalık olmayan Dizeler:
Kotlin en String.toLong(radix: Int)
Java'nın eşdeğerdir eLong.parseLong(String, int)
:
Dize bağımsız değişkenini, ikinci bağımsız değişken tarafından belirtilen yarıçapta uzun işaretli olarak ayrıştırır. Dizedeki karakterlerin tümü belirtilen yarıçapın rakamları olmalıdır ...
Ve işte java.lang.Long.decode(String)
resim ortaya çıkıyor :
Bir Dizeyi Bir Uzun Kodun Kodunu Çözer. Aşağıdaki dilbilgisi tarafından verilen ondalık, onaltılık ve sekizli sayıları kabul eder: DecodableString:
(İşaret) Ondalık Sayı | (İşaret) 0x HexDigits | (İşaret) 0X HexDigits | (İşaret) # HexDigits | (İşaret) 0 OctalDigits
İşaret: - | +
Bu , diğer yöntemlerin a ile sonuçlanacağı decode
Dizeleri ayrıştırabileceği anlamına gelir ."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
Bir dönüştürmek için String
hiç Long
KOTLIN 1.3 (yani 64 bitlik işaretli tamsayı gösterir) oldukça basittir .
Aşağıdaki üç yöntemden herhangi birini kullanabilirsiniz:
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
NumberFormatException
Ayrıştırma sırasında işlemek istemiyorsanız
var someLongValue=string.toLongOrNull() ?: 0
Aslında, birkaç yol var:
Verilen:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Sonra elimizde:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+