Scanner类nextInt(),nextLine()注意用法

Scanner录入

java的scanner类有几个常用的方法:nextInt(), next(), nextLine()
其中第一个是用来读入整型数字的,第2,3都是读入字符串的。

nextInt() 根据分隔符(回车或空格)读取输入流的第一部分,并且只读取数字(非数值会抛出异常),不读取分隔符,读取完毕时游标留在本行

nextLine() 此方法返回当前行的其余部分,不包括结尾处的行分隔符,并把游标移至下一行的行首。

测试1: nextLine方法:

 Scanner s =new Scanner(System.in);  
        String line= s.nextLine() ;//输入: abc(回车)
        for(char c:line.toCharArray()) System.out.println((int)c) ;//输出979899(验证不包括回车)
        String str  =s.nextLine() ;//输入: abc(回车)
        for(char c:str.toCharArray()) sop((int)c) ;//输出979899(验证移到下一行)

测试2: 需要输入数值和字符串

同一行输入一个数字和一个字符串 VS 一行输入数字后换行输入字符串

Scanner s =new Scanner(System.in); 
int y=s.nextInt() ; 
String line= s.nextLine() ;
System.out.println("y="+y + " line="+line); 
//一行输入: 2 line 输出: y=2 line= line

//换行输入:
3 (按下回车直接输出)
输出: y=3 line=

从测试用例看出:情况和上面的描述是一样的。

原因分析

  • 换行输入产生没录全的原因:首先是nextInt()方法读取后不会将游标移到下一行,nextLine()方法读取到的是”此方法返回当前行的其余部分“。

nextLine()方法的官方描述就是:

Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.

翻译过来就就是:

此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。
因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。

总结

想要连续输入字符串和数字,为了防止出错,有一些常规办法:

  1. 如果可以的话,可以将字符串的录入放在前面,数字放到后面
  2. 使用多一个nextLine()方法吃掉多出来的分隔符。
  3. 直接键盘录入字符串,再用split()方法分割。
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值