java Scanner类
Scanner类
概述:JDK5以后用于获取用户的键盘输入,是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
构造方法
(1)public Scanner(InputStream source);
System类有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入。
InputStream source = System.in;
成员方法
方法 | 描述 |
---|---|
public boolean hasNextXxx(); | 判断是否还有下一个输入项,其中Xxx可以是任意类型的,如:Int、Double等。如果是判断是否包含下一个字符串,则可以省略Xxx。 |
public Xxx nextXxx(); | 获取下一个输入项,Xxx的含义和上个方法中的Xxx相同 注意:默认情况下,Scanner使用空格、回车、tab等作为分隔符 |
常用方法
(1)public int nextInt(); 获取一个int类型的值
(2)public String nextLine(); 获取一个String类型的值,接收缓冲区中所有的字符,
在遇到回车换行符时停止,回车换行符也会接收掉
(3)public String next(); 接收到缓冲区第一个有效字符(之前的分隔符自动过滤,不接收)开始,遇到的第一个分隔符结束(tab键,空格,回车换行),分隔符不会接收掉
nextLine()获取不到数据问题
注意:
如果nextLine()之前有其他Scanner类的next方法时,会受到影响,失去录入机会
主要原因:
换行符号的问题
,前面说到,nextXxx()
方法默认使用空格、回车等作为分隔符,当单纯输入一个数字时,并不会立刻执行下一语句,而是会等用户输入分隔符,如果此时用户输入的是空格,那没事;如果用户是回车,那后面的nextLine()
将获取不到数据。对nextInt()
等数值类型,只会获取单个字符,所以没事,对于next()
来说,方法读取数据的结束标志就是分隔符,当next()
在缓存区读取数据时,一旦发现分隔符就会直接将分隔符前的数据读取走,但是并不会处理分隔符。对于nextLine()
来说,方法读取数据结束的标志是回车符,它获取的是一行字符串,当输入回车符时,也会被它当成是字符串的一员全部读入,然后结束读取。
//1. 导包
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//2. 创建键盘录入数据的对象
Scanner sc = new Scanner(System.in);
//3. 接收数据
System.out.println("请录入一个整数:");
int i = sc.nextInt();
System.out.println("请录入一个浮点数:");
double d = sc.nextDouble(