Tak więc z powodu braku metod, takich jak Long.valueOf(String s)
ja, utknąłem.
Jak przekonwertować String na Long w Kotlin?
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
null
jeś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
null
jeś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:źródło
String
mają funkcję rozszerzenia,toLong()
a takżetoInt()
inne. Możesz ich użyć. Może @ilya może zaktualizować tę odpowiedź do bieżącego Kotlin (usuńjet.String
odniesienie).Metody rozszerzające są dostępne dla
String
s, aby przeanalizować je na inne typy pierwotne. Przykłady poniżej:"true".toBoolean()
"10.0".toFloat()
"10.0".toDouble()
"10".toByte()
"10".toShort()
"10".toInt()
"10".toLong()
źródło
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.String
są nieaktualne. Oto aktualny Kotlin (1.0):Każdy
String
w 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źródło
To interesujące. Kod w ten sposób:
tworzy ten wynik:
Myślę, że Kotlin w tym przypadku dokonuje konwersji z
java.lang.Long
i długo prymitywnego nakotlin.Long
automatyczny. Jest to więc rozwiązanie, ale z przyjemnością zobaczyłbym narzędzie bez użycia pakietu java.lang.źródło
Właściwie 90% czasu, w którym musisz również sprawdzić, czy „długi” jest prawidłowy, więc potrzebujesz:
Istnieje odpowiednik „orNull” dla każdego „toLong” z podstawowych typów, a te pozwalają na zarządzanie nieprawidłowymi przypadkami z zachowaniem Kotlina? idiom.
źródło
string.toLong ()
gdzie
string
jest twoja zmienna.źródło
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 JavaLong.parseLong(String)
:Ciągi niedziesiętne:
Kotlin
String.toLong(radix: Int)
jest odpowiednikiem eLong.parseLong(String, int)
Java :I tu pojawia
java.lang.Long.decode(String)
się obraz:Oznacza to, że
decode
może analizować ciągi znaków, tak jak"0x412"
inne metody spowodują utworzenie plikuNumberFormatException
.źródło
Konwersja a
String
naLong
(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:
źródło
Jeśli nie chcesz obsługiwać
NumberFormatException
podczas analizowaniaźródło
Właściwie jest kilka sposobów:
Dany:
Następnie mamy:
źródło