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

时间:2013-10-22 13:36:01

标签: kotlin

Kotlin Challenge已经开始。

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

Kotlin的主要方法看起来像

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

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

12 个答案:

答案 0 :(得分:101)

<强> 1。 string.toLong()

  

将字符串解析为[Long]数字并返回结果。

     

@throws NumberFormatException如果字符串不是有效的   代表一个数字。

<强> 2。 string.toLongOrNull()

  

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

<强> 3。 str.toLong(10)

  

将字符串解析为[Long]数字并返回结果。

     

@throws NumberFormatException如果字符串不是有效的   代表一个数字。

     

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

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

<强> 4。 string.toLongOrNull(10)

  

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

     

当[radix]不是字符串的有效基数时,@throws IllegalArgumentException   数字转换。

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

<强> 5。 java.lang.Long.valueOf(string)

public static Long valueOf(String s) throws NumberFormatException

答案 1 :(得分:90)

String有相应的扩展方法:

"10".toLong()

答案 2 :(得分:54)

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

答案 3 :(得分:8)

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

Kotlin中的任何String都有一个扩展功能,您可以调用toLong()。没有什么特别的,只需使用它。

记录所有extension functions for String。您可以在api reference

中找到标准库的其他文件

答案 4 :(得分:6)

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

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

输出:

2
true

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

答案 5 :(得分:6)

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

"10".toLongOrNull()

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

答案 6 :(得分:1)

string.toLong()

其中string是您的变量。

答案 7 :(得分:1)

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

 var someLongValue=string.toLongOrNull() ?: 0

答案 8 :(得分:0)

在Kotlin编程语言中,有5种不同的将String转换为Long的方法,如下所示:

  1. string.toLong()
  2. string.toLongOrNull()
  3. string.toLong(10)
  4. string.toLongOrNull(10)
  5. java.lang.Long.valueOf(string)

有关详细说明,请参见docs

答案 9 :(得分: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)

  

将字符串解码为Long。接受十进制,十六进制和八进制   以下语法给出的数字:DecodableString:

     

(符号)DecimalNumeral | (Sign)0x十六进制数字| (签名)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

答案 10 :(得分:0)

在Kotlin 1.3中将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

答案 11 :(得分: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          |
+—————————————————————————————————————————————+——————————+———————————————————————+