请先看如下代码

import java.util.*;

public class Test {
    public static void main(String[] args) {
        System.out.println("请输入若干字符串,以空格分隔");
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            System.out.println("你输入的是:" + sc.next());
        }
        System.out.println("程序结束了");
    }
}

程序运行之后,当我们输入字符串,回车之后,发现程序并没有输出 “程序结束了”
在这里插入图片描述
如果你此时再继续输入,你会发现程序还可以接收你的输入,并且仍然没有输出 “程序结束了”

这是因为当执行到 hasNext() 时,如果判断为空,程序并不会返回 false,而是将方法阻塞,等待你继续输入内容

如何解决这个问题?

使用 hasNext() 的重载方法
在这里插入图片描述

import java.util.*;

public class Test {
    public static void main(String[] args) {
        System.out.println("请输入若干字符串,以空格分隔");
        Scanner sc = new Scanner(System.in);
        // 输入时如果匹配到 # 则返回 true,然后取非
        while(!sc.hasNext("#")) {
            System.out.println("你输入的是:" + sc.next());
        }
        System.out.println("程序结束了");
    }
}

在这里插入图片描述
除此之外,也可以使用快捷键手动结束程序

  1. Windows系统:Ctrl +Z
  2. macOS:⌘ + D

实测其它以 has 开头的方法也具有此特性

获取键盘输入的一个 int 数字:int num = sc.nextInt();
即使用空格分开,输入多个,也只能获取第一个

获取键盘输入的一个字符串:String str = sc.next();

Scanner 类的以 has 开头的方法,都是作判断用的,返回值类型是 boolean,而不是用于获取值的

其实键盘输入的任何东西都是当作字符串处理的,如果这个字符串可以转化为符合你要求的类型(比如int类型),就正常获取这个值,如果不能转化就报异常

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐