Odpowiedzi:
1. string.toLong()
Analizuje ciąg jako liczbę [Long] i zwraca wynik.
@throws NumberFormatException, jeśli ciąg nie jest prawidłową reprezentacją liczby.
2. string.toLongOrNull()
Analizuje ciąg jako liczbę [Long] i zwraca wynik lub
nulljeśli łańcuch nie jest prawidłową reprezentacją liczby.
3. str.toLong(10)
Analizuje ciąg jako liczbę [Long] i zwraca wynik.
@throws NumberFormatException, jeśli ciąg nie jest prawidłową reprezentacją liczby.
@throws IllegalArgumentException, gdy [podstawa] nie jest prawidłową podstawą konwersji ciągów na liczby.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Analizuje ciąg jako liczbę [Long] i zwraca wynik lub
nulljeśli łańcuch nie jest prawidłową reprezentacją liczby.@throws IllegalArgumentException, gdy [podstawa] nie jest prawidłową podstawą konwersji ciągów na liczby.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String ma odpowiednią metodę rozszerzenia:
"10".toLong()
Stringmają funkcję rozszerzenia, toLong()a także toInt()inne. Możesz ich użyć. Może @ilya może zaktualizować tę odpowiedź do bieżącego Kotlin (usuń jet.Stringodniesienie).
Metody rozszerzające są dostępne dla Strings, aby przeanalizować je na inne typy pierwotne. Przykłady poniżej:
str.toLongOrNull()i inne podobnie nazwane metody są również przydatne, jeśli nie możesz zagwarantować, że dane wejściowe zostaną poprawnie sformatowane. Dzięki temu możesz robić takie rzeczy jakstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Uwaga: wspomniane odpowiedzi jet.Stringsą nieaktualne. Oto aktualny Kotlin (1.0):
Każdy Stringw Kotlinie ma już funkcję rozszerzenia, którą możesz wywołać toLong(). Nic specjalnego nie jest potrzebne, po prostu go użyj.
Wszystkie funkcje rozszerzeńString są udokumentowane. Możesz znaleźć inne dla standardowej biblioteki lib w dokumentacji API
To interesujące. Kod w ten sposób:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
tworzy ten wynik:
2
true
Myślę, że Kotlin w tym przypadku dokonuje konwersji z java.lang.Longi długo prymitywnego na kotlin.Longautomatyczny. Jest to więc rozwiązanie, ale z przyjemnością zobaczyłbym narzędzie bez użycia pakietu java.lang.
Właściwie 90% czasu, w którym musisz również sprawdzić, czy „długi” jest prawidłowy, więc potrzebujesz:
"10".toLongOrNull()
Istnieje odpowiednik „orNull” dla każdego „toLong” z podstawowych typów, a te pozwalają na zarządzanie nieprawidłowymi przypadkami z zachowaniem Kotlina? idiom.
string.toLong ()
gdzie stringjest twoja zmienna.
Jedna ze starych dobrych możliwości w Javie, o której nie ma mowy w odpowiedziach, to java.lang.Long.decode(String).
Ciągi dziesiętne:
Kotlin String.toLong()jest odpowiednikiem Java Long.parseLong(String):
Analizuje argument ciągu jako długość dziesiętną ze znakiem . ... Wynikowa wartość long jest zwracana dokładnie tak, jakby argument i podstawa 10 zostały podane jako argumenty
parseLong(java.lang.String, int)metody.
Ciągi niedziesiętne:
Kotlin String.toLong(radix: Int)jest odpowiednikiem eLong.parseLong(String, int) Java :
Analizuje argument łańcuchowy jako długi ze znakiem w podstawie określonej przez drugi argument. Wszystkie znaki w ciągu muszą być cyframi o określonej podstawie ...
I tu pojawia java.lang.Long.decode(String)się obraz:
Dekoduje ciąg znaków na Long. Akceptuje liczby dziesiętne, szesnastkowe i ósemkowe podane według następującej gramatyki: DecodableString:
(Sign) DecimalNumeral | (Podpisz) 0x HexDigits | (Podpisz) 0X HexDigits | (Znak) # HexDigits | (Znak) 0 OctalDigits
Znak: - | +
Oznacza to, że decodemoże analizować ciągi znaków, tak jak "0x412"inne metody spowodują utworzenie pliku 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
Konwersja a Stringna Long(która reprezentuje 64-bitową liczbę całkowitą ze znakiem) w Kotlin 1.3 jest dość prosta .
Możesz użyć dowolnej z następujących trzech metod:
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
Jeśli nie chcesz obsługiwać NumberFormatExceptionpodczas analizowania
var someLongValue=string.toLongOrNull() ?: 0
Właściwie jest kilka sposobów:
Dany:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Następnie mamy:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+