所以我有这个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的新手,想要明白如何做到这一点。谢谢!
答案 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
,因为您的输入不应更改(由用户提供)。