Scanner概念
scanner可以用来获取用户的输入,八个基本数据类型除字符外都可以输入,另外输入字符串有两种方式next与nextLine。接下来介绍他们的区别。
1.next与nextLine的区别
1.1 区别一
String st1 = scanner.nextLine();
String st2 = scanner.next();
System.out.println("nextLine方式输入:" + st1);
System.out.println("next方式输入:" + st2);
从运行结果看出:nextLine方式输入的字符串可以含有空格,也就是说它是以回车作为输入的结束符。
next输入的字符串不能含有空格,它以空格、tab、回车作为输入的结束符。
1.2 区别二
int num = scanner.nextInt(); // 8
String st = scanner.nextLine(); // hello java
System.out.println(num + "===========" + st); // 8 =======
可以看到,还没等我输入字符串,本次输入就自动结束了。显然没有达到我的期望。
结论:nextLine会读取到回车作为他的值。
如何解决这个问题:
1.就以nextLine来读取上一次输入的回车作为它的值。
int num = scanner.nextInt();
scanner.nextLine(); //读取回车
String st = scanner.nextLine();
System.out.println(num + "===========" + st);
可以看出问题解决。
多一行代码总感觉不爽,还有没有其他解决方案呢?
2.以next来读入字符串,前提必须是所输入的字符串不能包含空格。
int num = scanner.nextInt();
String st = scanner.next();
System.out.println(num + "====" + st);
可以看出问题也可以解决。
3.在业务允许的情况下,可以将字符串输入放到第一行,避免读入回车作为他的值。
String st = scanner.nextLine(); //第一行输入
int num = scanner.nextInt();
System.out.println(num + "====" + st);
问题也可以解决。
总结next与nextLine区别
|
next |
nextLine |
|
不能读入含有空格的字符串,以空格、Table、回车作为本次输入的结束符 |
可以读入空格、以回车作为结束符 |
|
不会读取回车作为它的值 |
会读取回车作为它的值 |
补充一种方法
可以通过把输入nextLine字符串当作一个方法封装起来,然后调用这个方法。
public class ScannerDemo {
public static int getInt() {
return new Scanner(System.in).nextInt();
}
public static String getString() {
return new Scanner(System.in).nextLine();
}
}
测试一下
int x = ScannerDemo.getInt();
String st = ScannerDemo.getString();
System.out.println(x);
System.out.println(st);
可以看出nextLine读取回车的问题已经没有了。所以这种方法也是可行的。