Scanner 中 next()、nextInt()、nextLine()、hasNext()、hasNextInt() 的使用方法及注意事项

JavaScanner方法next(),nextInt(),nextLine()详解及hasNext在循环中的应用,

1、next()、nextInt()、nextLine() 的使用方法及区分

三者简单定义

next():此方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,遇到第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。如下例:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("读入一个字符串:");
        String s = sc.next();
        System.out.println(s);
    }

 结果:


nextInt():此方法只读取数值,不会读取空格和换行符,当我们用此方法读取后,再用 nextLine() 方法读取,会读取到剩余的空格或换行符,如下例:


nextLine():此方法会扫描到一行内容并作为一个字符串而被获取到,如果要读取带有空格的一串字符串,需要用此方法,如下例:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("读入第一个字符串:");
        String s  = sc.next();
        System.out.println(s);
        System.out.println("读入第二个字符串:");
        s = sc.nextLine();
        System.out.println(s);
    }

 结果:

解决方法:只需在sc.next()后面加上一个sc.nextLine()即可消除该回车,如下:

 结果:


例:当你输入一串带空格的字符串,敲下回车后,若最开始碰到 sc.next(),sc.next() 只会读取第一个不是空格的单词。例如下例,当 sc.next 读完 hello 后,读取的 cursor 是在空格前,导致读取的 nextLine 长度是 6。


2、循环时如何使用 hasNext 方法

遇到 hasNext() 时,Scanner 会阻塞,等待用户输入,等你输入后返回 true,若没有,会一直阻塞等待用户输入

如下代码,你需要先先输入,才会进入while循环,才会显示“请输入”

当我们想用 hasNext 做退出条件的 while 循环时,

  • 方法一是在控制台手动输入 Ctrl+Z
  • 方法二 while(!sc.hasNext("#")) 约定当一行输入 # 时退出

如下:


3、用 hasNextInt() 作为判断下一个输入是否为数字需要配合 next() 方法使用

hasNextInt() 函数大体意思表示 scanner 当前的标记的输入是否为 int,并不会自动的移动标记。

例如实现一个判断当前输入是否为数字,不是的话提示请输入数字,因为该函数不会自动的移动标记,所以就会死循环输出“请输入数字”,如下代码

要实现 hasNextInt() 的读取的标记位置的改变,可以用 sc.next() 移动

解决代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值