Scanner中next*(), next(), nextLine()混用的问题

本文探讨了在Java中使用Scanner时,next*(), next(), nextLine()混用可能导致的问题。文章通过实例展示了它们之间的区别,指出在混合使用时可能会额外读取换行符,导致数据解析错误。建议避免混用,统一使用nextLine()或next*/next()来处理输入流。" 118679659,10774046,Vue实现表格动态输入及对象转换,"['Vue', 'javascript']
摘要由CSDN通过智能技术生成

背景

       本人最近在做华为机试练习题时,由于其输入用例为多行数据,因此混用了Scanner的next*()、next()、nextLine()。在使用过程中,发现了混用的一些问题,特此记录并分享。

三者的区别

        Scanner内部拥有一个缓冲区,并且存在一个指针p指向下一个将要读取的元素,每调用一次next()、next*()、nextLine(),指针p都将会向前移动特定的距离。

       1. next()划分每个元素的标准是:空格、制表符、或者换行符。所有元素均有这三种情况分割开来,其所有返回的值均为String类型。对于如下输入:

10 23 42 44
12 20

        调用第一次next(),将会返回String类型的“10”,第二次调用返回“23”,依次类推,不同行的内容会自动跳至下一行的开始元素,如:第四次调用next()时返回“44”,而第五次调用next(),会返回“12”,并不会因为换行而造成返回换行符的情况。

        测试程序如下:

import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            for(int i = 0; i<6;i++)
                System.out.println("第"+(i+1)+"个输入,值为: "+in.next());
        }
    }
}

        控制台输入输出显示内容如下:

10 23 42 44
12 20
第1个输入,值为: 10
第2个输入,值为: 23
第3个输入,值为: 42
第4个输入,值为: 44
第5个输入,值为: 12
第6个输入,值为: 20

        2. next*()与next()的区别在于,可以将下一个需要读取的元素直接转化为指定的类型(如果可以转化的话),其余特性均相同。对于如下数据:

10 23 hello
world 2.34

        第一次调用nextDouble()会自动将整型10转化为值为10.0的double类型,第二次调用nextDouble()会自动将整型23转化为值为23.0的double类型,第三次调用nextDouble()会产生java.util.InputMismatchException异常,因为无法将一个字符串转化为一个double类型。

        测试程序如下:

import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值