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()的区别