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

输入完成后如何终止扫描仪?

秦宏盛
2023-03-14
public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        try {
            while (scan.hasNextLine()){

                String line = scan.nextLine().toLowerCase();
                System.out.println(line);   
            }

        } finally {
            scan.close();
        }
    }

只是想知道在我完成输入后如何终止程序?因为在几次“输入”之后扫描仪仍然会继续,假设我要继续输入...我试过了:

if (scan.nextLine() == null) System.exit(0);

if (scan.nextLine() == "") System.exit(0);  

它们不起作用....程序继续运行,打乱了初衷,

共有3个答案

施赞
2023-03-14

您必须查找指示输入结束的特定模式,例如“##”

// TODO Auto-generated method stub
    Scanner scan = new Scanner(System.in);
    try {
        while (scan.hasNextLine()){

            String line = scan.nextLine().toLowerCase();
            System.out.println(line);
            if (line.equals("##")) {
                System.exit(0);
                scan.close();
            }
        }

    } finally {
        if (scan != null)
        scan.close();
    }
东郭勇
2023-03-14

字符串比较使用完成。等于()而不是==

所以,试试< code>scan.nextLine()。等于(" " )。

齐振
2023-03-14

问题是一个程序(比如你的程序)不知道用户已经完成了输入,除非用户...以某种方式...告诉它。

用户可以通过两种方式执行此操作:

> < li>

输入“文件结束”标记。在UNIX和Mac OS上,通常是< kbd>CTRL D,在Windows上是< kbd>CTRL Z。这将导致< code>hasNextLine()返回< code>false。

输入一些被程序识别为“我完成了”的特殊输入。例如,它可以是一个空行,或者像“exit”这样的特殊值。程序需要专门测试这一点。

< sup >(你也可以设想使用一个计时器,并且假设用户在N秒或N分钟内没有输入任何内容就已经完成了。但这不是一种用户友好的方式,在许多情况下,这将是危险的。)

当前版本失败的原因是您正在使用 == 来测试空字符串。您应该使用等于等于空方法。(请参阅如何在 Java 中比较字符串?

其他需要考虑的事情是大小写敏感性(例如“退出”与“退出”)以及前导或尾随空格的影响(例如“退出”与“退出”)。

 类似资料:
  • 为此,我创建了一个名为的单例。这个类处理所有的输入阅读内容。我创建了一个名为的方法,它将回调作为参数。在这个方法中,我创建了一个新线程,并在其中等待使用的输入。这个类还有方法,它向上面描述的线程发送中断消息。下面是该类的当前实现: 这个代码极不可靠。我一会儿就告诉你我的意思。我制作了一个名为Client的玩具类,在中,我用计时器模拟了消息收入。 以下是它的工作原理: 我知道这个问题非常长(也许是不

  • 我对编程相当陌生。目前我正在做一个uni项目,用java创建一个基本的文本游戏。我遇到的问题是,如何实现一个不允许用户输入相同名称的业务规则。我把它设置好了,这样扫描仪就可以读取阵列了。我使用的是Java,这是我第一次使用这个论坛,所以我非常感谢大家提供的帮助,并提前感谢大家!:) 并为糟糕的格式道歉,我不知道如何正确发布。

  • 问题内容: 我试图在Go中编写一个扫描程序,以扫描连续行,并在返回之前清理掉行,以便您可以返回逻辑行。因此,给定以下SplitLine函数(Play): 我希望代码返回类似以下内容: 但是,它在返回第一行后停止。第二个电话返回。 任何人有任何想法,还是一个错误? 问题答案: 我认为这是一个错误,因为即使返回的令牌为nil(bufio.SplitFunc),也不会将Advance value> 0用

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 问题内容: 这可能是一个愚蠢的问题,但是由于找不到答案,我不得不提出这个问题。 在交互式python中,我想处理一条消息: 一切正常,但是…如何阻止它获取输入并将其保存到message变量中?使用ctrl + c停止将停止整个过程,因此没有输入要保存在任何地方。我想我找不到一个简单的答案… 问题答案: 对于基于Unix的系统: 您好,您可以录音: 通过发送EOF关闭标准输入(stdin)。 范例:

  • 我想在我的代码中手动读取一些值。除了最后一个(lambda2)之外,它对所有值都有效。我可以无限地继续键入值,即使它们不是双精度的,也不会发生任何事情。如果我用任何其他值键入其他值,我会收到一条错误消息,以及第一次输入lambda2时的错误消息。我在另一个代码中以类似的方式(最终只创建了一个不同的对象)进行了操作,并且效果很好。