引言
很多Java初学者在使用Scanner的 next 和 nextLine 方法时有时还是会弄混,这里就详细介绍一下两种方法的使用和注意;
next()
使用next方法记住两点就好了:
- 有效字符前的空格会忽略;
- 有效字符遇到空白符停止录入;
测试代码:
package test01;
import java.util.Scanner;
public class NextTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 1,输入不存在空白符
System.out.println("输入不存在空白符:");
String str1 = scanner.next(); // 输入:今天是个好天气
System.out.println(str1); // 输出:今天是个好天气
System.out.println("====================");
// 2,输入的有效字符前存在空白符
System.out.println("输入的有效字符前存在空白符:");
String str2 = scanner.next(); // 输入: 今天是个好天气
System.out.println(str2); // 输出:今天是个好天气
System.out.println("====================");
// 3,输入的有效字符中存在空白符
System.out.println("输入的有效字符中存在空白符:");
String str3 = scanner.next(); // 输入:今天 是个好天气
System.out.println(str3); // 输出:今天
}
}
输出:
nextLine()
nextLine方法只需要记住一点:
- 回车符之前的所有字符都可以获取到;
测试代码:
package test01;
import java.util.Scanner;
public class NextLineTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 1,输入不存在空白符
System.out.println("输入不存在空白符:");
String str1 = scanner.nextLine(); // 输入:今天是个好天气
System.out.println(str1); // 输出:今天是个好天气
System.out.println("====================");
// 2,输入的有效字符前存在空白符
System.out.println("输入的有效字符前存在空白符:");
String str2 = scanner.nextLine(); // 输入: 今天是个好天气
System.out.println(str2); // 输出: 今天是个好天气
System.out.println("====================");
// 3,输入的有效字符中存在空白符
System.out.println("输入的有效字符中存在空白符:");
String str3 = scanner.nextLine(); // 输入:今天 是个好天气
System.out.println(str3); // 输出:今天 是个好天气
}
}
输出:
next() 和 nextLine() 一起使用
当 next() 和 nextLine() 放在一起使用时,就有意思了;
首先你需要简单了解一下:
当通过键盘输入数据时,会存入缓存区等待读取,直到遇到相应的空白符时才会结束;
这里一定要记住它会存入你键盘的所有输入!!!
下面是几种使用情况;
1,先调用nextLine再调用next
这种情况没有什么好说的,就看一下代码和运行结果就好了;
代码如下:
package test01;
import java.util.Scanner;
public class UseAll01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 先调用nextLine再调用next,分别各输出一句话
System.out.println("请输入:今晚月色真美");
String str1 = scanner.nextLine(); // 输入:今晚月色真美
System.out.println(str1);
System.out.println("请输入:风也温柔");
String str2 = scanner.next(); // 输入:风也温柔
System.out.println(str2);
}
}
输出:
可以看到 next() 和 nextLine() 的输入都可以输出;
2,先调用next再调用nextLine
这种情况可能很多人都遇到过,先看代码:
package test01;
import java.util.Scanner;
public class UseAll02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 先调用next再调用nextLine,分别各输出一句话
System.out.println("请输入:今晚月色真美");
String str1 = scanner.next(); // 输入:今晚月色真美
System.out.println(str1);
System.out.println("请输入:风也温柔");
String str2 = scanner.nextLine(); // 输入:风也温柔
System.out.println(str2);
}
}
输出:
??第二句话为什么无法输入了呢?
这确实是运行结果,我就简单分析一下原因:
其实就是当输入完“今晚月色真美”后我们又输入了一个回车“\n”输出了结果,因为next读取到回车就结束了,所以这个回车符就一直在缓存中存在,直到nextLine需要输入时,直接遇到这个回车符结束输入;
那么该如何解决呢?
很简单,只要把这个回车符通过一个 nextLine 给释放掉就可以了;
代码如下:
package test01;
import java.util.Scanner;
public class UseAll03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 先调用next再调用nextLine,分别各输出一句话
System.out.println("请输入:今晚月色真美");
String str1 = scanner.next(); // 输入:今晚月色真美
System.out.println(str1);
scanner.nextLine(); // 释放掉缓冲区的回车符
System.out.println("请输入:风也温柔");
String str2 = scanner.nextLine(); // 输入:风也温柔
System.out.println(str2);
}
}
输出:
总结
要知道常见的空白符,例如空格、回车、TAB等;
如果需要next(nextInt、nextDouble等)和nextLine一起使用,最好就是把nextLine放在前面,如果必须放在后面不要忘了使用nextLine释放掉回车符;
欢迎大家的点评!