Scanner类的next() 和nextLine()的区别

Posted dxj1016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scanner类的next() 和nextLine()的区别相关的知识,希望对你有一定的参考价值。

next() 和nextLine()方法的区别:

通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hashNext 与 hashNextLine 判断是否还有输入的数据
Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是 空白符;比如空格,回车,tab 等等。

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符串(nextLine):");
        String s = scanner.nextLine();
        System.out.println(s);
        System.out.println("输入字符串(next):");
        String next = scanner.next();
        System.out.println(next);

/*
无空格的情况:
输入字符串(nextLine):
早上好吃早餐了吗
早上好吃早餐了吗
输入字符串(next):
早上好吃早餐了吗
早上好吃早餐了吗
 */

/*
有空格的情况:
输入字符串(nextLine):
早上好 吃早餐了吗
早上好 吃早餐了吗
输入字符串(next):
早上好 吃早餐了吗
早上好
 */

解析:nextLine是遇到回车认为结束输入,next是遇到空白认为结束输入。所以如果有空格的情况下,当nextLine输入完毕之后回车就结束了nextLine然后输出了,然后到next输入的时候是早上好之后有了空格,那么他就认为是结束输入了,你后面输入的他都认为没有,所以输出的时候就是早上好,没有后面的东西。

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符串(next):");
        String next = scanner.next();//    ni   ni
        System.out.println(next);//ni
        System.out.println("输入字符串(nextLine):");
        String s = scanner.nextLine();
        System.out.println(s);
/*
无空格:
输入字符串(next):
早上好吃早餐了吗
早上好吃早餐了吗
输入字符串(nextLine):
 */

/*
有空格:
输入字符串(next):
早上好 吃早餐了吗
早上好
输入字符串(nextLine):
 吃早餐了吗
 */

解析:next在前面的时候,有空格情况下,输入了早上好然后空格就相当于结束了输入,所以输入的后面的吃早餐了吗只是在缓冲区,但是没有作为next部分输出,这时候回车之后next的就输出了早上好,然后因为回车了所以到nextLine的时候就认为这个回车就是结束了输入,所以就当是nextLine的时候输入了空数据就结束了,所以输出的是缓冲区的那个“ 吃早餐了吗” 。

/*
输入字符串(next):
     早上好 吃早餐了吗
早上好
输入字符串(nextLine):
 吃早餐了吗
 */

解析:输入的前面的空白还没有遇到有效字符,所以next的时候会在遇到有效字符之后才算进去,所以输出的没有早上好前面的空格。

next():

1、一定要读取到有效字符后才可以结束输入。

2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。

3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。

4、next() 不能得到带有空格的字符串。

nextLine():

1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。

2、可以获得空白。

Scanner scanner = new Scanner(System.in);
        System.out.println("输入整数数组,用逗号隔开:");
        String s = scanner.nextLine();
        String[] split = s.split(",");
        int a = split.length;
        int[] array2 = new int[a];
        for (int i = 0; i < a; i++) 
            array2[i] = Integer.parseInt(split[i]);
        
        for (int i = 0; i < a; i++) 
            System.out.print(array2[i]+" ");
        
        System.out.println();
        
        int[] array = new int[a];
        System.out.println("输入整数数组,用空格分开:");
        for (int i = 0; i < a; i++) 
            array[i] = scanner.nextInt();
        
        for (int i = 0; i < a; i++) 
            System.out.print(array[i]+" ");
        
/*
输入整数数组,用逗号隔开:
1,2,3,4
1 2 3 4
输入整数数组,用空格分开:
1 2 3 4
1 2 3 4
 */

注意:要nextLine在next前面,不然next结束之后nextLine输出的就是空数据了

以上是关于Scanner类的next() 和nextLine()的区别的主要内容,如果未能解决你的问题,请参考以下文章

Scanner类的next() 和nextLine()的区别

Scanner类的next() 和nextLine()的区别

Scanner类的next()方法和nextLine()方法的异同点

Scanner对象next与nextLine

Java用户交互Scanner

Java用户交互Scanner