[Java基础]Scanner中next()和nextLine()方法的使用和区别

引言

很多Java初学者在使用Scanner的 next 和 nextLine 方法时有时还是会弄混,这里就详细介绍一下两种方法的使用和注意;

next()

使用next方法记住两点就好了:

  1. 有效字符的空格会忽略;
  2. 有效字符遇到空白符停止录入;

测试代码:

package test01;

import java.util.Scanner;

public class NextTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 1,输入不存在空白符
        System.out.println("输入不存在空白符:");
        String str1 = scanner.next(); // 输入:今天是个好天气
        System.out.println(str1); // 输出:今天是个好天气

        System.out.println("====================");
        // 2,输入的有效字符前存在空白符
        System.out.println("输入的有效字符前存在空白符:");
        String str2 = scanner.next(); // 输入:       今天是个好天气
        System.out.println(str2); // 输出:今天是个好天气

        System.out.println("====================");
        // 3,输入的有效字符中存在空白符
        System.out.println("输入的有效字符中存在空白符:");
        String str3 = scanner.next(); // 输入:今天  是个好天气
        System.out.println(str3); // 输出:今天
    }
}

输出:
在这里插入图片描述

nextLine()

nextLine方法只需要记住一点:

  1. 回车符之前的所有字符都可以获取到;

测试代码:

package test01;

import java.util.Scanner;

public class NextLineTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 1,输入不存在空白符
        System.out.println("输入不存在空白符:");
        String str1 = scanner.nextLine(); // 输入:今天是个好天气
        System.out.println(str1); // 输出:今天是个好天气

        System.out.println("====================");
        // 2,输入的有效字符前存在空白符
        System.out.println("输入的有效字符前存在空白符:");
        String str2 = scanner.nextLine(); // 输入:       今天是个好天气
        System.out.println(str2); // 输出:       今天是个好天气

        System.out.println("====================");
        // 3,输入的有效字符中存在空白符
        System.out.println("输入的有效字符中存在空白符:");
        String str3 = scanner.nextLine(); // 输入:今天  是个好天气
        System.out.println(str3); // 输出:今天  是个好天气
    }
}

输出:
在这里插入图片描述

next() 和 nextLine() 一起使用

当 next() 和 nextLine() 放在一起使用时,就有意思了;
首先你需要简单了解一下:
当通过键盘输入数据时,会存入缓存区等待读取,直到遇到相应的空白符时才会结束;

这里一定要记住它会存入你键盘的所有输入!!!
下面是几种使用情况;

1,先调用nextLine再调用next

这种情况没有什么好说的,就看一下代码和运行结果就好了;
代码如下:

package test01;

import java.util.Scanner;

public class UseAll01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 先调用nextLine再调用next,分别各输出一句话
        System.out.println("请输入:今晚月色真美");
        String str1 = scanner.nextLine(); // 输入:今晚月色真美
        System.out.println(str1);

        System.out.println("请输入:风也温柔");
        String str2 = scanner.next(); // 输入:风也温柔
        System.out.println(str2);
    }
}

输出:
在这里插入图片描述
可以看到 next() 和 nextLine() 的输入都可以输出;

2,先调用next再调用nextLine

这种情况可能很多人都遇到过,先看代码:

package test01;

import java.util.Scanner;

public class UseAll02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 先调用next再调用nextLine,分别各输出一句话
        System.out.println("请输入:今晚月色真美");
        String str1 = scanner.next(); // 输入:今晚月色真美
        System.out.println(str1);

        System.out.println("请输入:风也温柔");
        String str2 = scanner.nextLine(); // 输入:风也温柔
        System.out.println(str2);
    }
}

输出:
在这里插入图片描述
??第二句话为什么无法输入了呢?
这确实是运行结果,我就简单分析一下原因:
其实就是当输入完“今晚月色真美”后我们又输入了一个回车“\n”输出了结果,因为next读取到回车就结束了,所以这个回车符就一直在缓存中存在,直到nextLine需要输入时,直接遇到这个回车符结束输入;

那么该如何解决呢?
很简单,只要把这个回车符通过一个 nextLine 给释放掉就可以了;

代码如下:

package test01;

import java.util.Scanner;

public class UseAll03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 先调用next再调用nextLine,分别各输出一句话
        System.out.println("请输入:今晚月色真美");
        String str1 = scanner.next(); // 输入:今晚月色真美
        System.out.println(str1);

        scanner.nextLine(); // 释放掉缓冲区的回车符
        System.out.println("请输入:风也温柔");
        String str2 = scanner.nextLine(); // 输入:风也温柔
        System.out.println(str2);
    }
}

输出:
在这里插入图片描述

总结

要知道常见的空白符,例如空格、回车、TAB等;
如果需要next(nextInt、nextDouble等)和nextLine一起使用,最好就是把nextLine放在前面,如果必须放在后面不要忘了使用nextLine释放掉回车符;

  • 42
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YXXYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值