Scanner对象的nextInt()方法的注意点

在写一个程序的时候,我的本意是读取一个整数之后,再读取其后的一整行,在整数之后,会有换行输入,其输入形式如下:
4
+ 1 2
- 1 2
* 1 2
/ 1 2
但是在写了一个测试程序之后发现了一个问题,程序如下:
package cn.edu.shu.test;

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int numOfInt = in.nextInt();// 读取一个整数
		System.out.println("numOfInt->" + numOfInt);
		while (in.hasNext()) {
			String str = in.nextLine();
			String strs[] = str.split(" ");
			System.out.println("strs.length=" + strs.length);
			System.out.println("str=" + str);
			for (String string : strs) {
				if ("".equals(string)) {
					System.out.println("string是\"\"");
				}
				if (" ".equals(string)) {
					System.out.println("string是\" \"");
				}
				if ("  ".equals(string)) {
					System.out.println("string是\"  \"");
				}
			}
		}
	}
}
当我输入测试数据之后,运行结果如下:
4
numOfInt->4
+12
strs.length=1
str=
string是""
strs.length=1
str=+12
-12
strs.length=1
str=-12
*12
strs.length=1
str=*12
/12
strs.length=1
str=/12
其中红色数据是输入数据,黑色数据是输出数据,乍一看很奇怪的输出,仔细想想之后,是因为nextInt()读取完了之后,并没有换行操作,紧接着调用nextLine()方法读到的数据是“4”之后的空格,并且当你用一个空格去匹配读取的内容的时候,返回true,比如我用"".equals(string)返回true,我用“一个空格”.equals(string)返回false,我用“两个空格”.equals(string)还是返回false,所以说,用nextLine()读取的数据只要是空格,其对数量并不做比较,就认为是一个空串,所以第一次nextLine()读取的是空串,其输出的length是1 ,第二次,才读取到换行符之后的我的输入数据,并且正确输出了。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值