Java中,我们可以通过 Scanner 类来获取用户的输入。先来看看next()方法的使用:
package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
/* Scanner类中next的用法 */ //System.out.println("程序顶端输入验证: "); Scanner s = new Scanner(System.in); //从键盘接收数据
//next方式接收字符串 System.out.println("next方式接收: ");
//判断是否还有输入 if (s.hasNext()){
String str = s.next(); System.out.println("next()的值为: " + str); }
输入
123
返回
如果我们输入 123 456 hello world呢?
返回
123
这时候我们知道,使用next()方法时,输入中如果有空格、tab键等,next()只会获取空格前的有效字符,同时也会trim掉输入内容前的空格。不信我们试试
输入
123 3456 5555
返回
123
下面看下nextLine()的用法,还是使用同样的代码,只是需要修改下s.netLine()
package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
System.out.println("为nextLine()准备的值: ");
String str2 = s.nextLine(); System.out.println("nextLine()的值为: " + str2);
s.close();
}
}
这次我们没有hasNext方法来判断是否有输入,直接上值
输入123
返回123
输入123 456 hello world
返回
123 456 hello world
说明nextLine()方法,只要有输入值,无论输入的是什么(只要不是回车键),都会显示出来
那该方法会不会trim掉输入字符前的空格呢?我们来试试
输入 123 456 trim hello
返回 123 456 trim hello
说明会显示
那么如果这两个方法用在一起会怎么样呢?
package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
/* Scanner类中next的用法 */ //System.out.println("程序顶端输入验证: "); Scanner s = new Scanner(System.in); //从键盘接收数据
//next方式接收字符串 System.out.println("next方式接收: ");
//判断是否还有输入 if (s.hasNext()){
String str = s.next(); System.out.println("next()的值为: " + str); }
/* Scanner类中nextLine的方法 */ System.out.println("为nextLine()准备的值: "); String str2 = s.nextLine(); System.out.println("nextLine()的值为: " + str2);
s.close();
}
}
输入123
返回
next方式接收:
123
next()的值为: 123
为nextLine()准备的值:
nextLine()的值为:
然后发现后面的nextLine()值不能输入了,但是如果我输入 123 456 hello world 会返回什么呢?
返回
456 hello world
为什么会这样呢?
原来是把回车符留在了缓冲区,下一次读取会碰到读取空字符串的情况
如果要避免这种情况,怎么办呢?
就是增加一句
String str3 = s.nextLine();
说明下面的nextLine()要读取再一次输入的值了,那么整体的程序为:
package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
/* Scanner类中next的用法 */ //System.out.println("程序顶端输入验证: "); Scanner s = new Scanner(System.in); //从键盘接收数据
//next方式接收字符串 System.out.println("next方式接收: ");
//判断是否还有输入 if (s.hasNext()){
String str = s.next(); System.out.println("next()的值为: " + str); }
/* Scanner类中nextLine的方法 */ System.out.println("为nextLine()准备的值: "); String str3 = s.nextLine(); String str2 = s.nextLine(); System.out.println("nextLine()的值为: " + str2);
s.close();
}
}
返回为:
next方式接收:
123 456 789
next()的值为: 123
为nextLine()准备的值:
123 456 789
nextLine()的值为: 123 456 789
不过我们也发现,之前输入123 456 789,增加了一句之后,第一次输入的值都会清除掉
java不简单呀,一个类中一个方法就有很多规则,很多都是在使用中才发现的。