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
nulldize 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
nulldize 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()
Stringiç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
StringBunları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.StringBelirtilen cevaplar güncel değildir. İşte mevcut Kotlin (1.0):
StringKotlin'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.Longuzun 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 ()
stringdeğ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ğı decodeDizeleri 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 Stringhiç LongKOTLIN 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
NumberFormatExceptionAyrış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 |
+—————————————————————————————————————————————+——————————+———————————————————————+