187

所以,由于缺乏像Long.valueOf(String s)我这样的方法被卡住了。

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

4

11 回答 11

202

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
于 2017-08-23T09:00:19.287 回答
101

String有对应的扩展方法:

"10".toLong()
于 2013-11-19T18:41:30.750 回答
61

s可以使用扩展方法将String它们解析为其他原始类型。以下示例:

于 2015-11-13T23:41:20.573 回答
9

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

Kotlin 中的AnyString已经有一个可以调用的扩展函数toLong()。不需要什么特别的,只要使用它。

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

于 2015-12-29T19:59:27.940 回答
8

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

"10".toLongOrNull()

每个基本类型的“toLong”都有一个“orNull”等价物,这些允许在与 Kotlin 保持一致的情况下管理无效案例?成语。

于 2017-05-21T10:14:14.720 回答
7

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

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

使这个输出:

2
true

我想,在这种情况下,Kotlin 会自动将java.lang.Longlong 原语转换为自动。kotlin.Long所以,这是一个解决方案,但我很高兴看到没有使用 java.lang 包的工具。

于 2013-10-23T08:54:56.417 回答
3

在 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)
println("numberWithRadix(2) = $number4")           // numberWithRadix(2) = 7
于 2019-01-12T23:18:51.827 回答
2

答案中没有提到的一种很好的旧 Java 可能性是java.lang.Long.decode(String).


十进制字符串:

Kotlin 的String.toLong()等价于 Java 的Long.parseLong(String)

将字符串参数解析为带符号的十进制 long。... 返回结果 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
于 2019-01-04T08:29:38.807 回答
1

如果您不想NumberFormatException在解析时处理

 var someLongValue=string.toLongOrNull() ?: 0
于 2019-01-16T09:25:29.170 回答
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          |
+—————————————————————————————————————————————+——————————+———————————————————————+
于 2019-03-04T10:32:34.820 回答
0
string.toLong()

string你的变量在哪里。

于 2018-04-19T05:52:31.783 回答