使用readLine()方法拆分Kotlin字符串

时间:2018-02-02 20:47:45

标签: java kotlin

所以我有这个Java代码:

String values = input.nextLine();
String[] longs = values.split(" ");

将字符串输入拆分为字符串数组。

我在Kotlin中尝试

var input: String? = readLine()
var ints: List<String>? = input.split(" ".toRegex())

我收到一个错误: &#34;在String类型的可空接收器上只允许安全(?。)或非空声明(!!。)调用?&#34;

我是Kotlin的新手,想要明白如何做到这一点。谢谢!

2 个答案:

答案 0 :(得分:8)

如果你看一下readLine(),就会发现它可能会返回null

/**
 * Reads a line of input from the standard input stream.
 *
 * @return the line read or `null` if the input stream is redirected to a file and the end of file has been reached.
 */
public fun readLine(): String? = stdin.readLine()

因此,对其结果调用split是不安全的,您必须处理null案例,例如如下:

val input: String? = readLine()
val ints: List<String>? = input?.split(" ".toRegex())

可以找到其他替代方案和更多信息here

答案 1 :(得分:1)

看,你的代码几乎是正确的,只是错过了!!这确保字符串不应该为空(它会抛出错误)。你的代码应该是这样的:

val input: String? = readLine()
var ints: List<String>? = input!!.split(" ".toRegex())

请注意,我刚刚在第1行添加了!!运算符并将var更改为val,因为您的输入不应更改(由用户提供)。