java基础知识学习 - Scanner类

Scanner类

方法分类:

1.next系列 next nextInt nextDouble…

2.nextLine

next系列的扫描开始是第一个不为空格/制表/换行的字符,结束同理

nextLine的扫描开始是任意字符,结束为换行

举个next系列的例子:

//在第一次输入 “  100  200” + 回车 
System.out.println("请输入数字");
num = scanner.nextInt();
System.out.println("请输入数字");
num2 = scanner.nextInt();

System.out.println(num);	//100
System.out.println(num2);	//200

/*
此时虽然我们在第一次输入就写了200,但是在100后有空格所以视为第一次输入已经结束
而第二个数字仍然可以接收200,原因可能是因为输入时一次性输入的内容放在缓冲区
然后每次的方法按照扫描开始和结束的标志获取内容
*/

根据两种Scanner的方法的特点,需要特别注意一点,就是当两种方法混用时会出现错误,如下:

//输入 “100” + 回车
System.out.println("请输入数字");
num = scanner.nextInt();
System.out.println("请输入字符串");
str = scanner.nextLine();

System.out.println(num);	//100
System.out.println(str);	//""
System.out.println(str.length());	//0

/*
此时换行是第一次输入的结束标志,但是同时也变成了第二次字符串输入的结束标志
字符串没有如何输入直接结束,为空字符串,长度为0,存储编码值为0
原因:当第一次输入读取时读取到回车结束,结束的地方在回车前,那么第二次输出读取就是从回车开始
*/	

为了避免产生这种现象,考虑以下几种办法:

//1 加一句 nextLine 吸收换行
...
num = scanner.nextInt();
scanner.nextLine();
...
str = scanner.nextLine();

/*可以正常使用,轻微增加代码量*/
//2 交换两种方法的位置
...
str = scanner.nextLine();
...
num = scanner.nextInt();

/*给输入增加了限制 使用不方便*/
//3 第一次输入用空格结束
//输入“100 abc” + 回车
...
num = scanner.nextInt();
...
str = scanner.nextLine();

/*
结果为 100 和 “ abc",明显接收了多余的空格,与预期不符合
如果使用其他字符串的方法消除空格,则增加了代码量
原因:nextInt读到第一个空格结束,读取停在第一个空格前,nextLine读取则从这个空格开始
*/
//4 使用两个对象
...
num = scanner.nextInt();
...
str = scanner2.nextLine();

/*
可以正常使用,但是会浪费空间
前面提到猜测Scanner对象会有一个输入读取的缓冲区
所以使用不同的对象两次输入就不会读取同一个回车
*/

其实以上4种办法因为种种原因都不适合做为最终解决方案,要从根本上解决问题应该避免混合使用,当需要输入多种数据类型时,最可靠的是只使用 nextLine,

//使用包装类 Datatype.parseDatatype 将字符串转换成数值
strNum = scanner.nextLine();
intNum = Integer.parseInt(strNum);
doubleNum = Double.parseDouble(strNum);
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值