关于next(),nextLine(),nextInt()在使用中的问题总结

关于next(),nextLine(),nextInt()在使用中的问题总结

一、概念

(1)、next()方法在缓冲区中遇到空格键、Tab键和回车符等空白字符时会将空白字符前的数据读取走,而空白字符还留在缓冲区中。
(2)、nextInt()在获取整数的过程中,若遇到空格键、Tab键和回车符等空白字符时,会把空白字符前面的数据取走,但并不处理后面的空白符(和next()方法类似)
(3)、nextLine()方法在缓冲区中读取一行数据,这行数据以回车符为结束符,而且它会将包括Enter键在内的数据取走。

二、遇到的问题

问题:

Java nextLine()函数之前如果使用了类似nextInt()的函数,Java nextLine()函数会失效

代码如下:
		Scanner input = new Scanner(System.in);
		int m = input.nextInt();
		
		String strs1 = input.nextLine();
		int n = input.nextInt();

		System.out.println(m);
		System.out.println(strs1);
		System.out.println(n);
输入如下:

1
abc
2
错误如下:出现这样的错误:

在这里插入图片描述

原因:

(1)、在nextInt()在获取整数的过程中,若扫描到“空白字符(空格键、Tab键和回车符等)”,会把“空白字符”前面的数据取走,但并不处理后面的空白符
(2)、到nextLine()运行时,则会把这个空白字符读进去,并且一旦扫描到空白字符,扫描就结束了,nextLine()就运行完了,只读取了一个空白符。(3)、但这还不至于报错,如果这个nextLine后面还有其他函数,比如nextInt(),就会导致nextInt()读取到nextLine()本应该读取的字符,导致报错

解决方案:

方案一(稳定):

用两次nextLine(),第一个nextLine()接收空白符号(空格键、Tab键和回车符等),第二个nextLine()接收数据

		Scanner input = new Scanner(System.in);
		int m = input.nextInt();
		input.nextLine();// 用来接收“\n”
		
		String strs1 = input.nextLine();
		int n = input.nextInt();

		System.out.println(m);
		System.out.println(strs1);
		System.out.println(n);
方案二(需注意):

用next()代替nextInt()

		Scanner input = new Scanner(System.in);
		int m = input.nextInt();
				
		String strs1 = input.next();
		int n = input.nextInt();

		System.out.println(m);
		System.out.println(strs1);
		System.out.println(n);

需注意: next()不能得到带空格的字符串

方案三(不稳定):

new两个Scanner,第一个用于接收nextInt(),第二个用于接收nextLine()

		Scanner input = new Scanner(System.in);
		Scanner scan = new Scanner(System.in);

		int m = input.nextInt();
		String strs = scan.nextLine();
		int n = input.nextInt();

		System.out.println(m);
		System.out.println(strs);
		System.out.println(n);

在我查阅资料的过程中,发现方案三有瑕疵,好像会因为第二次new一个新的Scanner而中断System.in之类的

欢迎各位补充方案三

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值