Scanner类介绍:
继续做笔记,之前学过的基本语法中,并没有实现程序和人的交互,但是Java给我们提供了一个工具类,我们可以通过Scanner类来获取用户的输入。
Scanner 类也位于 java.util包下面,使用前要先import java.util.Scanner
. 而java.util.Scanner是Java5的新特征,这个类最实用的地方表现在获取控制台输入,主要功能是简化文本扫描。
使用方法
只要通过 new Scanner(System.in)创建了一个新的Scanner; 控制台就会卡住,一直等待接收用户输入Enter
才会把接收到的内容传给Scanner处理,程序往下运行。
而Scanner类的 next()
与 nextLine()
方法都可以获取到用户输入的内容。
两者的区别在于next()获取到的是空格前的内容,nextLine得到的则是整行Enter
前的内容。
next()示例:
package com.zctou.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//Scanner的标准用开头,new 一个对象并打开IO流
Scanner scanner = new Scanner(System.in);
//hasNext()方法判断接收情况,程序会卡住等待用户输入
if(scanner.hasNext()) {
//看haxNext()输出
System.out.println(scanner.hasNext());
//接收用户输入的内容
String str = scanner.next() ;
System.out.println(str);
}
//结束前要关闭IO流
scanner.close(); //对应new Scanner(System.in)。
}
}
输出:
//用户输出空格,控制台要求再次输入
//用户直接'Enter',控制台还是要求重新输入
hello zctou.com //用户输入有效字符串
true //hasNext()输出 true
hello //只输出部份字符串
可以看到,程序只输出了hello,也就是next()方法
是以 " "(空格)为结束符的,且hello两边的空格被自动删除,相当于js,php中的trim()
函数。也就是说next()方法只能接收 部份 字符串,且
Enter
(回车)和(空格)皆为无效字符串。程序强制要求用户输入内容
nextLine()示例:
package com.zctou.scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in) ;
//对应的是 nextLine()方法,顾名思义,接收行
if(scanner.hasNextLine()) {
//看hasNextLine()输出什么
System.out.println(scanner.hasNextLine());
//接收用户输入的内容
String str = scanner.nextLine() ;
System.out.println(str);
}
scanner.close(); //同样结束scanner的io流
}
}
输出:
//用户输入一串空格
true //hasNextLine()输出 true
//程序返回一串空格
----------------------
//用户直接Enter
true //hasNextLine()输出 true
//程序同样没卡住要求重新输入字符串
----------------------
hello zctou.com \n zctou \r zctou //用户输出
true //hasNextLine()输出 true
hello zctou.com \n zctou \r zctou //程序输出
可以看到,nextLine()
是把程序接收的所有内容全部传给scanner输出,这一行是以Enter
(回车)结束,并非以换行符为结束符。同时nextLine()
方法能获取到' '空格。与
next()
对比,netxLine()
方法可以接收空字符串,返回的是Enter
前的所有字符串,没有则为空,不强制要求用户输入有效字符。
结论:
- scanner.next() 方法要求用户输入有效字符,程序才会往下执行。也就是说scanner.hasNext()肯定为true。
- scanner.nextLine()方法虽然对用户输出的字符没任何要求,但用户不输入或者输入空字符串,程序还是会往下执行,所以scanner.hasNextLine() 也肯定为true。
上面两例子中的判断hasNextLine()
和 hasNext()
暂时看来毫无意义。