1、Scanner的概述和构造方法原理
Scanner的概述:
JDK5以后用于获取用户的键盘输入
Scanner的构造方法原理:
Scanner(InputStream source)
System类下有一个静态的字段:
public static final InputStream in; 标准的输入流,对应着键盘录入
import java.io.InputStream;
import java.util.Scanner;
public class Mytest {
public static void main(String[] args) {
/* Scanner(InputStream source)
构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。*/
InputStream in =System.in;
/*System 类
静态的属性 in
public static final InputStream in“标准”输入流。此流已打开并准备提供输入数据。
通常,此流对应于键盘输入*/
Scanner sc = new Scanner(in);
//hasXXX()
// nextXXXX()
//录入数字的
int i = scanner.nextInt();
long l = scanner.nextLong();
byte b = scanner.nextByte();
boolean b1 = scanner.nextBoolean();
double v = scanner.nextDouble();
//录入字符串的
String s = scanner.nextLine();
}
}
2、Scanner类的hasNextXxx()和nextXxx()方法
基本格式
hasNextxxx() 判断下一个是否是某种类型的元素,其中xxx可以是Int,Double等。
如果需要判断是否包含下一个字符串,则可以省略xxx
nextxxx() 获取下一个输入项。xxx的含义和上个方法中的xxx相同
import java.util.Scanner;
public class MyTest {
public static void main(String[] args) {
//循环,直到输入正确类型
while(true){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
//hasNextInt()方法判断输入数据是否为该类型
if(sc.hasNextInt()){
int i = sc.nextInt();
System.out.println(i);
}else{
System.out.println("输入类型错误,请重新输入");
}
}
}
}
3、Scanner获取数据出现的小问题及解决
两个常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值
问题:当我们先录入整数,再录入字符串,发现字符串没有录入上。
原因:当我们录入了整数后,敲了一下回车换行,那么这个回车换行,被当做字符串已经录入了
import java.util.Scanner;
public class MyTest1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int i = sc.nextInt();
System.out.println(i);
System.out.println("请输入一个字符串");
String l = sc.nextLine();
System.out.println(l);
//当我们先录入整数,再录入字符串,发现字符串没有录入上。
//原因:当我们录入了整数后,敲了一下回车换行,那么这个回车换行,被当做字符串已经录入了。
}
}
如何解决:
1.再录入字符串时,重新创建一个新的Scanner对象
2.换个录入字符串的方法 next();
import java.util.Scanner;
public class MyTest1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int i = sc.nextInt();
System.out.println(i);
//换个录入字符串的方法 next();
System.out.println("请输入一个字符串");
String n = sc.next();
System.out.println(n);
//再录入字符串时,重新创建一个新的Scanner对象
System.out.println("请输入一个字符串");
sc = new Scanner(System.in);
String l = sc.nextLine();
System.out.println(l);
}
}
next()和nextLine()录入区别:
import java.util.Scanner;
public class MyTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = sc.nextLine();
System.out.println(s);//会录入,回车换行,空格字符
System.out.println("请输入一个字符串");
String s1 = sc.next();//不录入 回车换行,空格字符
System.out.println(s1);
}
}