当前位置: 首页 > 知识库问答 >
问题:

Kotlin扫描器-验证nextLine()用户输入

施海
2023-03-14

首先为标题感到抱歉,想不出别的了。我目前正在完成一个关于JetBrains Hyperskill的项目,该项目是一个单位转换器,用户可以在其中转换重量、长度和温度单位。我几乎完成的项目,转换工作很好,但我有一个问题与用户输入。

用户输入由以下部分组成:

  <number> + 
    <(unit name) or (degree + unit name) or (degrees + unit name)> +
    <random word like "to" or "in"> +
    <(unit name) or (degree + unit name) or (degrees + unit name)>

因此,用户可以输入如下内容:

    null
    null
  • val amount=scan.todouble()-要转换的数量
  • val source=scan.nextline().touppercase()-这应该是像“摄氏”和“摄氏度”这样的输入
  • val word=scan.next()-随机单词
  • val target=scan.nextline().touppercase()-这也应该读取输入,如“摄氏”和“摄氏度”

我的问题--如何使next()或nextLine()同时适用于“华氏度”和“华氏度”(有效输入),但如果用户键入其他内容,则控制台中会打印错误消息,如“parse error”?

共有1个答案

邓建柏
2023-03-14

“字”令牌真的是随机的吗?如果是to或in,那么你可以在上面拆分字符串,然后你就有了

<value> <source units>, <target units>

如果您知道如何处理这些问题,您也可以使用regex,例如

(\d+) (degree \w+|degrees \w+|\w+) \w+ (.+)

在那里你把你关心的每个部分都放在一个捕捉组里。

 类似资料:
  • 我很难想出如何正确使用扫描仪来验证用户输入。例如,程序需要用户输入int,用户只能输入正数,如果用户输入“apple”、“delicious apple”或负数,问题将显示错误消息。我尝试了下面的代码,然后我发现了一个令人不安的问题,“那不是一个数字!”我不知道是什么引起了这些问题。。。。 我在“number=sc.nextInt()”下面加了一行代码,意外地解决了这个问题,现在我的代码变成: 这

  • 一段时间以来,我一直在做一个作为拼字字典的编程作业。该程序接受用户的输入,并输出一个包含单词列表的文件,这取决于用户从菜单中请求的内容。我遇到的问题与Scanner.nextLine()有关。 我不是很清楚为什么,但由于某种原因,有时我必须按一次enter键,然后我的代码才会接受我的输入并将其存储为变量。本质上,我最终输入了两次输入。我尝试在代码周围插入Scanner.nextLine()以“占用

  • 我让一个用户输入一个整数字符串,然后将它们添加到ArrayList,但我需要验证每个条目是否为正整数。我尝试了do/while循环、嵌套while环,而使用嵌套if和每个循环都会遇到自己的一组问题。 作为我当前设置的示例:用户输入例如:1 2 3 4 pageVar是我的扫描仪,pageRef是我的ArrayList 运行这个my while在等待更多的输入时被卡住了,我不知道如何打破它。

  • 问题内容: 我正在使用Java的扫描仪读取用户输入。如果我仅使用nextLine一次,那就可以了。使用两个nextLine时,第一个不会等待用户输入字符串(第二个会输入)。 输出: X:Y :(等待输入) 我的密码 任何想法为什么会发生这种情况?谢谢 问题答案: 您可能像以前那样调用方法。这样的程序是这样的: 演示您所看到的行为。 问题是不消耗,因此下一个调用将消耗它,然后等待读取的输入。 您需要

  • 从指定范围(0,20)内且为int的用户处获取有效整数的最佳方法是什么。如果他们输入了无效的整数打印输出错误。 我在想这样的事情: 这是正确的还是有更好的方法?

  • 在Java方面,我是一个业余爱好者,所以请原谅我的问题,如果它看起来很愚蠢:-P我有以下代码,旨在计算文件中的行数: 所以它很好,但我想将扫描仪重新用于其他目的,但nextLine已移动到文件的最后一行,我想将其重置回第一行。 (取而代之的是,我不得不使用另一台扫描仪来实现另一个目的,而在我看来,这似乎没有它应有的优雅。) 我肯定肯定有一种扫描仪方法可以将计数器重置为零? 谢谢 CJ