Как преобразовать String в Long в Kotlin?

Kotlin Challenge начался.

Все задачи состоят в том, чтобы написать консольную программу, которая считывает параметры из консоли и записывает вывод в консоль, чтобы сделать возможной автоматическую проверку.

основной метод в Kotlin выглядит

fun main(args: Array<String>): Unit {
    //do something
}

Большинство входных параметров в задачах следует интерпретировать как числа. Итак, из-за отсутствия таких методов, как Long.valueOf(String s) я просто застрял. Я не могу конвертировать String в Long, и мне стыдно.

Ответ 1

1. string.toLong()

Разбирает строку как число [Long] и возвращает результат.

@throws NumberFormatException, если строка недействительна представление числа.

2. string.toLongOrNull()

Разбирает строку как [длинный] номер и возвращает результат или 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)

Разбирает строку как [длинный] номер и возвращает результат или 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

Ответ 2

String имеет соответствующий метод расширения:

"10".toLong()

Ответ 4

Примечание. Ответы, упоминающие jet.String, устарели. Вот текущий Котлин (1.0):

Любой String в Котлине уже имеет функцию расширения, которую вы можете вызвать toLong(). Ничего особенного не требуется, просто используйте его.

Все функции расширения для String задокументированы. Вы можете найти других для стандартной библиотеки в ссылке api

Ответ 5

Это интересно. Код вроде этого:

val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);

делает этот вывод:

2
true

Я предполагаю, что Котлин в этом случае автоматически преобразует из java.lang.Long и длинный примитив в kotlin.Long. Итак, это решение, но я был бы рад видеть инструмент без использования пакета java.lang.

Ответ 6

Фактически, 90% времени, которое вам нужно также проверить на "длинный", действительно, поэтому вам нужно:

"10".toLongOrNull()

Существует эквивалент "orNull" для каждого "toLong" базовых типов, и это позволяет управлять недействительными случаями с сохранением Kotlin? идиомы.

Ответ 7

string.toLong()

где string ваша переменная.

Ответ 8

Если вы не хотите обрабатывать NumberFormatException при разборе

 var someLongValue=string.toLongOrNull() ?: 0

Ответ 9

Существует 5 различных способов конвертировать String в Long на языке программирования Kotlin, как показано ниже:

  1. string.toLong()
  2. string.toLongOrNull()
  3. string.toLong(10)
  4. string.toLongOrNull(10)
  5. java.lang.Long.valueOf (строка)

Обратитесь к документации для объяснения в деталях.

Ответ 10

Одна хорошая старая возможность Java, что не упомянуто в ответах, является java.lang.Long.decode(String).


Десятичные строки:

Kotlin String.toLong() эквивалентен Java Long.parseLong(String):

Разбирает строковый аргумент как длинный десятичный знак со знаком... Полученное длинное значение возвращается точно так же, как если бы аргумент и основание 10 были заданы в качестве аргументов parseLong(java.lang.String, int).


Недесятичные строки:

Kotlin String.toLong(radix: Int) эквивалентен Java e Long.parseLong(String, int):

Разбирает строковый аргумент как длинную со знаком в основании, указанном вторым аргументом. Все символы в строке должны быть цифрами указанного радиуса...

И вот на картинке появляется java.lang.Long.decode(String):

Декодирует строку в длинный. Принимает десятичные, шестнадцатеричные и восьмеричные числа, заданные следующей грамматикой: DecodableString:

(Знак) Десятичная цифра | (Знак) 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

Ответ 11

Преобразовать String в Long (который представляет 64-разрядное целое число со знаком) в Kotlin 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

Ответ 12

На самом деле, есть несколько способов:

Дано:

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          |
+—————————————————————————————————————————————+——————————+———————————————————————+

Ответ 13

    val a:String="10"
    val value:Long=a.toLong()