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()暂时看来毫无意义。
再从头|再回首