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

Kotlin挑战赛已经开始。

所有的任务是编写一个控制台程序,从控制台读取参数,并将输出写入控制台以使自动检查成为可能。

Kotlin的主要方法看起来像

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

任务中的大部分输入参数应该被解释为数字。 所以,由于缺乏像Long.valueOf(String s)这样的方法,我只是卡住了。 我不能把String转换成Long,我感到羞愧。

1. string.toLong()

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

如果字符串不是数字的有效表示forms,则返回NumberFormatException。

2. string.toLongOrNull()

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

3. str.toLong(10)

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

如果字符串不是数字的有效表示forms,则返回NumberFormatException。

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

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

4. string.toLongOrNull(10)

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

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

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

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

 public static Long valueOf(String s) throws NumberFormatException 

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

 "10".toLong() 

扩展方法可用于将String解析为其他基本types。 下面的例子:

  • "true".toBoolean()
  • "10.0".toFloat()
  • "10.0".toDouble()
  • "10".toByte()
  • "10".toShort()
  • "10".toInt()
  • "10".toLong()

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

Kotlin中的任何String都已经有了可以调用toLong()的扩展函数。 没有什么特别的需要,只要使用它。

所有的String扩展函数都被记录下来。 您可以在api参考中find标准lib的其他人

这真有趣。 这样的代码:

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

使这个输出:

 2 true 

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

其实,90%的时间你也需要检查’长’是有效的,所以你需要:

 "10".toLongOrNull() 

对于基本types的每个“toLong”,都有一个“orNull”的等价物,并且这些允许与Kotlin保持无效的案例管理? 成语。