Відповіді:
1. string.toLong()
Розбирає рядок як [Long] число і повертає результат.
@throws NumberFormatException, якщо рядок не є дійсним поданням числа.
2. string.toLongOrNull()
Розбирає рядок як [Long] число і повертає результат або
null
якщо рядок не є дійсним поданням числа.
3. str.toLong(10)
Розбирає рядок як [Long] число і повертає результат.
@throws NumberFormatException, якщо рядок не є дійсним поданням числа.
@throws IllegalArgumentException, коли [radix] не є дійсним радіусом для перетворення рядка в число.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Розбирає рядок як [Long] число і повертає результат або
null
якщо рядок не є дійсним поданням числа.@throws IllegalArgumentException, коли [radix] не є дійсним радіусом для перетворення рядка в число.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
має відповідний метод розширення:
"10".toLong()
String
мають функцію розширення toLong()
, а також toInt()
і інші. Ви можете використовувати ці. Можливо, @ilya може оновити цю відповідь на поточний Котлін (видалити jet.String
посилання.)
Доступні методи розширення для String
s для їх розбору на інші примітивні типи. Приклади нижче:
str.toLongOrNull()
та інші аналогічно названі методи також корисні, якщо ви не можете гарантувати, що вхід буде правильно відформатований. З цим ви можете робити такі речі, якstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Примітка. Відповіді, що згадуються jet.String
, застаріли. Ось поточний Котлін (1.0):
Будь-який String
в Котліні вже має функцію розширення, яку ви можете зателефонувати toLong()
. Нічого особливого не потрібно, просто використовуйте.
Всі функції розширення дляString
документально задокументовані. Ви можете знайти інших стандартних ліб у посиланні на api
Це цікаво. Код таким:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
робить цей вихід:
2
true
Я думаю, Котлін робить перетворення з java.lang.Long
давно примітивного в kotlin.Long
автоматичне в цьому випадку. Отже, це рішення, але я би радий бачити інструмент без використання пакету java.lang.
Насправді, 90% часу, який також потрібно перевірити "довгий", є дійсним, тому вам потрібно:
"10".toLongOrNull()
Існує еквівалент "orNull" для кожного "toLong" основних типів, і вони дозволяють керувати недійсними справами з підтримкою Kotlin? ідіома.
string.toLong ()
де string
ваша змінна.
Одна добра стара можливість Java, що не згадується у відповідях java.lang.Long.decode(String)
.
Десяткові рядки:
Котлін String.toLong()
еквівалент Java Long.parseLong(String)
:
Розбирає аргумент рядка як підписаний десятковий довгий . ... Отримане довге значення повертається точно так, як якщо б аргумент і радіус 10 були задані як аргументи
parseLong(java.lang.String, int)
методу.
Недесяткові рядки:
Котлін - х String.toLong(radix: Int)
еквівалентна Ява еLong.parseLong(String, int)
:
Розбирає аргумент рядка як підписаний довгий у радіусі, визначеному другим аргументом. Усі символи в рядку повинні бути цифрами заданого радіусу ...
І ось java.lang.Long.decode(String)
у картину входить :
Розшифровує рядок у довгий. Приймає десяткові, шістнадцяткові та восьмеричні числа, задані наступною граматикою: DecodableString:
(Знак) DecimalNumeral | (Знак) 0x HexDigits | (Знак) 0X HexDigits | (Знак) # HexDigits | (Знак) 0 OctalDigits
Знак: - | +
Це означає, що decode
можна проаналізувати рядки типу "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
Для того, щоб перетворити String
в Long
(який являє собою 64-розрядний ціле число) в Котлин 1.3 досить проста .
Ви можете використовувати будь-який з наступних трьох методів:
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
під час розбору
var someLongValue=string.toLongOrNull() ?: 0
Насправді існує кілька способів:
Подано:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Тоді ми маємо:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+