在 Kotlin 中如何解决同一行输入问题?

How can you solve an input in the same line problen in Kotlin?

我在使用 Kotlin 中的控制台应用程序时遇到问题。该程序在同一行中读取两个变量。如果我没记错的话,这只能用 readLine()!!.split(" ") 来完成 问题是下一个。它需要2个输入。当只提供一个输入时,程序会因越界而崩溃,因为没有输入第二个变量。在任务中,程序必须使用输入 /exit 退出。我不知道该怎么做。为第二个输入输入 space 不是一个选项,因为测试不接受它。提前致谢。

按以下格式输入两个数字:{source base} {target base}(退出类型/exit)> 36 10 输入以 36 为基数的数字以转换为以 10 为基数(返回类型 /back)> abcde 转换结果:17325410

按以下格式输入两个数字:{source base} {target base} (退出类型 /exit) > /exit

我不会回答你提出的所有问题,只是解决你的 OutOfBoundException,因为它看起来像 homework question 对我来说。


如果您不介意为 /exit 以外的输入抛出 OutOfBoundException,以下内容可能适合您。

val line = readln().trim()

if (line == "/exit") {
    // exit, e.g. through System.exit(0) or other means
} else {
    val bases = line
        .split(" ")
        .map { it.toInt() }
    val (sourceBase, targetBase) = bases

    // carry on with your program ...
}

您可能希望在拆分输入并将其转换为数字之前明确验证 /exit 以外的输入。

在这个简单的例子中,您可以利用正则表达式来验证用户输入。以下内容可能对您有用。

require(line.matches("""^\d+ \d+$""".toRegex())) {
    "You must enter two integer numbers delimited by a single space character!"
}

如果你还没有接触过正则表达式(regex),我会为你拆开上面的内容:

  • ^ - 从行首开始验证
  • \d - 匹配任何数字
    • + - 匹配前一个标记(任何数字)一次到无限次,尽可能多
  • - 按字面意思匹配白色 space 字符
  • \d - 匹配任何数字
    • + - 匹配前一个标记(任何数字)一次到无限次,尽可能多
  • $ - 验证直到行尾

我有意识地省略了任何控制流结构,因为这些与 OutOfBoundException.

无关