所以,由于缺少像Long这样的方法。valueOf(字符串s)我卡住了。

如何将字符串转换为长在Kotlin?


这很有趣。代码如下:

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

生成如下输出:

2
true

我猜,Kotlin从java.lang.Long和long原语转换到Kotlin。在这种情况下自动长。所以,这是解决方案,但我很高兴看到没有java的工具。朗包用法。


String有相应的扩展方法:

"10".toLong()

string可以使用扩展方法将它们解析为其他基本类型。在下面的例子:

“真正的”toBoolean()。 “10 . 0”toFloat()。 “10 . 0”toDouble()。 “10”toByte(。) “10”toShort(。) “10”toInt(。) “10”请(。)


注:回答中提及喷气机。字符串过时。以下是当前的Kotlin (1.0):

Kotlin中的任何字符串都有一个扩展函数,可以调用toLong()。不需要什么特别的东西,就用它吧。

String的所有扩展函数都有文档。你可以在api参考中找到其他标准库


实际上,90%的情况下你还需要检查long是否有效,所以你需要:

"10".toLongOrNull()

有一个'orNull'等效的每个'toLong'的基本类型,这些允许管理无效的情况与Kotlin?习语。


1. 弦请()。

将字符串解析为[Long]数字并返回结果。 如果字符串无效,则@抛出NumberFormatException 数字的表示。

2. 弦toLongOrNull()。

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

3. str.toLong(10)

将字符串解析为[Long]数字并返回结果。 如果字符串无效,则@抛出NumberFormatException 数字的表示。 @抛出IllegalArgumentException [基数]不是字符串到数字转换的有效基数。

public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))

4. string.toLongOrNull(10)

将字符串解析为[Long]数字,并返回结果或null 如果字符串不是数字的有效表示。 当[基数]不是一个有效的基数时,@抛出IllegalArgumentException 到数字转换。

public fun String.toLongOrNull(radix: Int): Long? {...}

5. java.lang.Long.valueOf(字符串)

public static Long valueOf(String s) throws NumberFormatException

string.toLong()

其中字符串是变量。


答案中没有提到的一个很好的旧Java可能性是Java .lang. long .decode(String)。


小数的字符串:

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

将字符串参数解析为带符号的十进制长. ...的 返回结果的长值,就像参数和 基数10作为parseLong(java.lang。String, int)方法。


Non-decimal字符串:

芬兰湾的科特林的字符串。toLong(基数:Int)相当于Java的eLong。parseLong(字符串、整数):

将字符串参数解析为带符号的长基数 第二个论点。字符串中的字符必须都是指定基数的数字…

下面是java.lang.Long.decode(String):

将String解码为Long。接受十进制、十六进制和八进制 由以下语法给出的数字:DecodableString: (符号)decimalnumbers |(符号)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

在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)         // binary
println("numberWithRadix(2) = $number4")           // numberWithRadix(2) = 7

使用toLongOrNull()方法,可以在?之后使用let{}作用域函数。安全呼叫接线员。

这种逻辑适用于只使用非空值执行代码块。

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

如果您不想在解析时处理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          |
+—————————————————————————————————————————————+——————————+———————————————————————+