如何在Kotlin中将String转换为Long?

Jer*_*ome 142 kotlin

Kotlin挑战赛已经开始.

所有任务都是编写一个控制台程序,从控制台读取参数并将输出写入控制台以进行自动检查.

Kotlin的主要方法看起来像

fun main(args: Array<String>): Unit {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

任务中的大多数输入参数都应解释为数字.所以,由于缺乏像Long.valueOf(String s)我刚刚卡住的方法.我无法将String转换为Long,我感到惭愧.

Mis*_*agh 120

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))
Run Code Online (Sandbox Code Playgroud)

4. string.toLongOrNull(10)

将字符串解析为[Long]数字并返回结果,或者null 如果字符串不是数字的有效表示.

@throws IllegalArgumentException [radix]不是字符串到数字转换的有效基数.

public fun String.toLongOrNull(radix: Int): Long? {...}
Run Code Online (Sandbox Code Playgroud)

5. java.lang.Long.valueOf(string)

public static Long valueOf(String s) throws NumberFormatException
Run Code Online (Sandbox Code Playgroud)


Ily*_*kov 92

String 有一个相应的扩展方法:

"10".toLong()
Run Code Online (Sandbox Code Playgroud)

  • Kotlin 中的名称发生了变化,您无需担心在哪里或为什么发生变化,只需知道在 Kotlin 中所有 `String` 都有一个扩展函数 `toLong()` 以及 `toInt()` 等。你可以使用这些。也许@ilya 可以将此答案更新为当前的 Kotlin(删除“jet.String”引用。) (2认同)

Eri*_*ric 56

扩展方法可用于String将它们解析为其他基本类型.以下示例:

  • 如果你不能保证输入格式正确,那么`str.toLongOrNull()`和其他类似命名的方法也很有用.有了这个,你可以做一些像`str.toLongOrNull()?. let {doSomethingWith(it)} ?: println("请输入一个数字")` (2认同)

Jay*_*ard 9

注意:提到jet.String的答案已过时.这是目前的Kotlin(1.0):

StringKotlin中的任何一个都有你可以调用的扩展功能toLong().没有什么特别需要,只需使用它.

记录所有扩展功能String.您可以在api参考中找到标准库的其他文件


Jer*_*ome 7

这真有趣.像这样的代码:

val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
Run Code Online (Sandbox Code Playgroud)

进行此输出:

2
true
Run Code Online (Sandbox Code Playgroud)

我想,在这种情况下,Kotlin会从java.lang.Long原始转换到长原始转换kotlin.Long.所以,它是解决方案,但我很乐意看到没有java.lang包使用的工具.


inn*_*ov8 6

实际上,90%的时间你需要检查'long'是有效的,所以你需要:

"10".toLongOrNull()
Run Code Online (Sandbox Code Playgroud)

对于基本类型的每个'toLong',有一个'orNull'等价物,这些允许管理与Kotlin保持一致的无效案例?成语.


ARG*_*Geo 6

在 Kotlin 中,将 a 转换StringLong(表示 64 位有符号整数)很简单。

您可以使用以下任意示例:

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)         // binary
println("numberWithRadix(2) = $number4")           // numberWithRadix(2) = 7
Run Code Online (Sandbox Code Playgroud)

通过方法,您可以在安全调用运算符之后toLongOrNull()使用let { }作用域函数。?.

这样的逻辑适合执行仅具有非空值的代码块。

fun convertToLong(that: String) {
    that.toLongOrNull()?.let {
        println("Long value is $it")
    }
}
convertToLong("123")                               // Long value is 123
Run Code Online (Sandbox Code Playgroud)