kotlin - 扫描仪无法正确读取行
问题描述
我的代码很简单,如下所示:
val rows = scanner.nextInt()
val numbersInRow = scanner.nextLine().split(" ")
当我尝试写“5”然后按回车然后写“1 2 3 4 5”我的变量 numbersInRow 存储:
1 - ""
2 - "2"
3 - "3"
4 - "4"
5 - "5"
而且我无法弄清楚为什么列表(1)中的第一个元素存储空字符。
解决方案
永远不要打电话nextLine
。相反,调用(在创建扫描仪后立即调用),scanner.useDelimiter("\\R");
然后调用.next()
读取整行。
这将做你想要的。
(说明:next()
返回到下一个 'token',默认情况下是任何空格,但实际上并不消耗它;相反,另一个nextX()
调用会消耗它。.nextLine
读取到下一行。这意味着如果你调用 next 方法,然后一个 nextLine 方法,假设用户使用回车键分隔输入,该nextLine()
方法返回一个空白字符串。这不是你想要的,但真正的问题是“任何空白”的默认分隔符不是你想要的想要。你想要“换行符”作为分隔符。\\R
是“换行符”。这是更简单的代码,更少的代码,如果用户决定使用键盘上最大的键(与注入nextLine()
调用'吃掉空格'如果他们这样做会失败)。
请注意,评论中的链接答案给出了较差的建议。我不确定如何处理之前已经提出问题的概念,对所述问题的主要(和已接受)答案并不正确,但明显逊色,但任何其他答案都没有滚雪球的机会。
推荐阅读
- python - 有没有办法对齐具有相同索引位置的多个列表?
- azure-functions - 如何从 Azure Function 中的 cosmos DB 文档触发器中获取 JSON 对象
- java - 如何用 Eclipse 运行 testng 工厂?
- swift - 从 Swift 将浮点数或颜色传递给 Metal 片段着色器
- java - 我是否必须将类扩展到 ConcurrentHashMap 或者我可以为 threadSafety 设置变量 ConcurrentHashMap
- laravel - Laravel 5.7 用户验证电子邮件未在注册时发送
- python - Homebrew vim 和 Numpy 不再支持选项了?
- ibm-cloud - 如何将 IBM Watson Assistant 与 Watson Discovery 链接
- python - 范围问题:函数中的变量不能用作其他函数的参数?
- bash - MacOS shell脚本基于标签移动文件