【发布时间】:2013-10-31 10:01:35
【问题描述】:
所以,由于缺乏像Long.valueOf(String s) 这样的方法,我被困住了。
如何在 Kotlin 中将 String 转换为 Long?
【问题讨论】:
标签: kotlin
所以,由于缺乏像Long.valueOf(String s) 这样的方法,我被困住了。
如何在 Kotlin 中将 String 转换为 Long?
【问题讨论】:
标签: kotlin
string.toLong()
string 是你的变量。
【讨论】:
在 Kotlin 中将 String 转换为 Long(表示 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)
println("numberWithRadix(2) = $number4") // numberWithRadix(2) = 7
【讨论】:
其实有几种方法:
给定:
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 |
+—————————————————————————————————————————————+——————————+———————————————————————+
【讨论】:
如果你不想在解析时处理NumberFormatException
var someLongValue=string.toLongOrNull() ?: 0
【讨论】:
答案中没有提到的一个很好的旧 Java 可能性是 java.lang.Long.decode(String)。
十进制字符串:
Kotlin 的 String.toLong() 等价于 Java 的 Long.parseLong(String):
将字符串参数解析为有符号十进制长。 ... 这 返回结果 long 值,就像参数和 基数 10 作为
parseLong(java.lang.String, int)方法的参数给出。
非十进制字符串:
Kotlin 的String.toLong(radix: Int) 等价于Java 的eLong.parseLong(String, int):
将字符串参数解析为指定基数的有符号长整数 第二个论点。 字符串中的字符必须都是指定基数的数字 ...
java.lang.Long.decode(String) 出现在图片中:
将 String 解码为 Long。接受十进制、十六进制和八进制 由以下语法给出的数字:DecodableString:
(符号)十进制数字 | (符号)0x HexDigits | (符号)0X HexDigits | (签名)# HexDigits | (符号)0 个八进制数
签名:- | +
这意味着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
【讨论】:
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
【讨论】:
其实90%的时候你还需要检查'long'是否有效,所以你需要:
"10".toLongOrNull()
每个基本类型的“toLong”都有一个“orNull”等价物,这些允许在与 Kotlin 保持一致的情况下管理无效案例?成语。
【讨论】:
这很有趣。像这样的代码:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
产生这个输出:
2
true
我猜,在这种情况下,Kotlin 会自动将 java.lang.Long 和 long 原语转换为 kotlin.Long。所以,这是一个解决方案,但我很高兴看到没有使用 java.lang 包的工具。
【讨论】:
Strings 可以使用扩展方法将它们解析为其他原始类型。以下示例:
【讨论】:
str.toLongOrNull() 和其他类似命名的方法也很有用。有了这个你可以做类似str.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
String有对应的扩展方法:
"10".toLong()
【讨论】:
String 都有扩展函数 toLong() 以及 toInt() 等.你可以使用这些。也许@ilya 可以将此答案更新为当前的 Kotlin(删除 jet.String 参考。)
注意:提及jet.String 的答案已过时。这是当前的 Kotlin (1.0):
Kotlin 中的任何String 都已经有一个扩展函数,你可以调用toLong()。不需要什么特别的,只要使用它。
所有extension functions for String 都已记录在案。您可以在api reference中找到其他标准库
【讨论】: