Java中next()与nextLine()详细解析

Java中中next与nextLine详细解析

1. next()用法

  • next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键Tab键Enter键等视为分隔符或结束符。
  • 简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next()方法不能得到带空格的字符串。

2. nextLine()用法

  • nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

3. 实例分析

  1. 先使用nextLine()方法,再使用next()方法。
package digit;
import java.util.Scanner;

public class TestNumber {

	public static void main(String[] args) {
	  // TODO Auto-generated method stub
	  String s1,s2;
	  Scanner sc=new Scanner(System.in);
	  System.out.print("请输入第一个字符串:");
	  s1=sc.nextLine();
	  System.out.print("请输入第二个字符串:");
	  s2=sc.next();
	  System.out.println("输入的字符串是:"+s1+"  "+s2);
	 }
	}

程序运行结果:
运行结果

可见,nextLine()方法可以输出空格,直至扫描到enter键才结束;而next()方法读到空格就停止了从键盘读值的操作,无法输出带空格的字符串。

  • 先使用next()方法,再使用nextLine()方法。
package digit;
import java.util.Scanner;

public class TestNumber {

	public static void main(String[] args) {
	  // TODO Auto-generated method stub
	  String s1,s2;
	  Scanner sc=new Scanner(System.in);
	  System.out.print("请输入第一个字符串:");
	  s1=sc.next();
	  System.out.print("请输入第二个字符串:");
	  s2=sc.nextLine();
	  System.out.println("输入的字符串是:"+s1+"  "+s2);
	  System.out.println("s1是:"+s1);
	  System.out.println("s2是:"+s2);
	 }
	}

程序运行结果:

运行结果

观察运行结果,可以得到以下发现:

  1. next()方法遇到空格的确会停止从键盘读数据的操作;
  2. nextLine()方法会自动读到第一次输入完后用户敲的回车(Enter键),从而导致第二次输入无法进行;
  3. 虽然第二次并没有从键盘输入数据,但是第一次输入以后未被读入s1的字符串部分均被完整的写入了s2;
  4. s2读到的是 空格+shi ytt!,注意,前面有一个空格哦。
  5. 为了规避这种问题,可以在next()方法后多加一条语句,使用nextLine()回收第一次输入后的回车输入。即:
package digit;
import java.util.Scanner;

public class TestNumber {

	public static void main(String[] args) {
	  // TODO Auto-generated method stub
	  String s1,s2;
	  Scanner sc=new Scanner(System.in);
	  System.out.print("请输入第一个字符串:");
	  s1=sc.next();
	  s2=sc.nextLine();
	  System.out.print("请输入第二个字符串:");
	  s2=sc.nextLine();
	  System.out.println("输入的字符串是:"+s1+"  "+s2);
	  System.out.println("s1是:"+s1);
	  System.out.println("s2是:"+s2);
	 }
	}

运行结果:
运行结果

注意:

实际上, nextDouble() ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。

  • 22
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

就是二二二二婷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值