一.Scanner类型
nextInt():读取整数,遇到非数字字符时结束。
nextFloat()/nextDouble():读取浮点数,遇到非数字字符时结束。
nextBoolean():读取布尔值,只能读取 true 或 false。
next():读取字符串,遇到空格、制表符或换行符时结束。PS:若一行字符串中有多个单词,则只能输出第一个单词且无法输出空格之类
nextLine():读取一行数据,包括换行符在内。PS:若一行字符串中有多个单词,可以全部输出
二.例子
1.正常情况用法
直接上代码例子
import java.util.Scanner;
public class 正常类型例子{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个整数");
int a2 = scanner.nextInt();
System.out.println("输入的整数为:" + a2);
System.out.println("请输入一个浮点数1");
float a3 = scanner.nextFloat();
System.out.println("输入的浮点数1为:" + a3);
System.out.println("请输入一个浮点数2");
double a4 = scanner.nextDouble();
System.out.println("输入的浮点数2为:" + a4);
System.out.println("请输入一个布尔类型");
boolean a5 = scanner.nextBoolean();
System.out.println("输入的布尔类型为:" + a5);
}
}
import java.util.Scanner;
该行为导入包,导入该包才能使用Scanner类
Scanner scanner = new Scanner(System.in);
该行是为编译器提供实例化,也是必须填入
2.关于next()和nextLine()的细节
a.当先调用nextLine()后调用next()
class nextLine与next情况1{
public static void main(String[] args){
//先调用nextLine,后调用next
Scanner scanner = new Scanner(System.in);
//nextLine
System.out.println("输入一个字符串");
String b1 = scanner.nextLine();//输入 这是一个字符串
System.out.println("得到:" + b1);//得到 这是一个字符串
//next
System.out.println("输入一个字符串");
String b2 = scanner.next();//输入 这是一个字符串
System.out.println("得到:" + b2);//得到这是一个字符串
}
}
b.当先调用next()后调用nextLine()
class nextLine与next情况2{
public static void main(String[] args){
//先调用next,后调用nextLine
Scanner scanner = new Scanner(System.in);
//next
System.out.println("输入一个字符串");
String c1 = scanner.next();//输入 这是一个字符串
System.out.println("得到:" + c1);//得到这是一个字符串
//nextLine
System.out.println("输入一个字符串");
String c2 = scanner.nextLine();//输入 这是一个字符串
System.out.println("得到:" + c2);//(没东西)
}
}
三.总结
不难看出,当next()和nextLine()同时使用时,先调用next()后调用nextLine()会导致nextLine()没有输出结果。
这是因为输出next()时输入了一个回车,这个回车会持续到nextLine()。
由此,nextLine()输出的是一个回车,所以为了防止这种情况,编码时一般不会在next()的后面加入nextLine()。