一、Scanner介绍
Scanner
类位于 java.util
包中,用于从输入源(如键盘、文件或字符串)读取数据,支持解析基本类型(如 int
, double
)和字符串。
二、常用的方法
方法 | 说明 |
nextInt() | 读取整数 |
nextDouble() |
读取双精度浮点数 |
nextBoolean() |
读取布尔值 |
next() | 读取单词(以空格为分隔符) |
nextLine() | 读取整行文本(包括空格) |
hasNextInt() | 检查下一个输入是否为整数(返回true/false) |
useDelimiter(";") | 自定义分隔符(默认是空格/换行) |
读取数据类型:nextInt()、nextDouble()、nextBoolean()、nextBayt()、nextShot()没有nextChar()!!!
如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取
检测输入是否为相应数据类型:hasNextInt()、hasNextDouble().....
三、基础使用步骤
- 导入包
import java.util.Scanner; // 必须导入
- 创建Scanner对象
Scanner scanner = new Scanner(System.in); // 从键盘读取输入
//scanner为对象名,可以用任意标识符代替 如:sc,input...... -
读取输入数据
int num = scanner.nextInt(); // 读取整数 double price = scanner.nextDouble(); // 读取浮点数 String name = scanner.next(); // 读取单词(空格分隔) String line = scanner.nextLine(); // 读取整行文本
- 关闭Scanner(释放内存)
scanner.close(); // 输入结束后关闭
四、每个方法的使用
- nextInt() 读取整数
//1.nextInt() 读取整数System.out.println("请输入一个整数:");int a = sc.nextInt();System.out.println("你输入的整数是:"+a);
-
nextDouble() 读取双精度浮点数
//2.nextDouble() 读取双精度浮点数System.out.println("请输入一个浮点数:");double b = sc.nextDouble();System.out.println("你输入的浮点数是:"+b);
-
nextBoolean() 读取布尔值 (true/false)
//3.nextBoolean() 读取布尔值 (true/false)System.out.println("请输入一个布尔值:");boolean d = sc.nextBoolean();System.out.println("你输入的布尔值是:"+d);
-
next() 读取单词(以空格为分隔符)
//4.next() 读取单词(以空格为分隔符)System.out.println("请输入一个单词:");String e = sc.next();System.out.println("你输入的单词是:"+e);
-
nextLine() 读取字符串 (读取一行)
//5.nextLine() 读取字符串 (读取一行)System.out.println("请输入一个字符串:");String c = sc.nextLine();System.out.println("你输入的字符串是:"+c);
-
hasNextInt() 判断是否还有整数可以读取 (返回true/false)
//6.hasNextInt() 判断是否还有整数可以读取 (返回true/false)System.out.println("是否还有整数可以读取:"+sc.hasNextInt());
-
useDelimiter("") 设置分隔符 (默认为空格/换行)
//Scanner scanner = new Scanner(输入源);
//scanner.useDelimiter("正则表达式"); 设置分隔符模式
//典型应用:解析 CSV、日志文件、自定义格式文本。//7.useDelimiter("") 设置分隔符 (默认为空格/换行)//Scanner scanner = new Scanner(输入源);//scanner.useDelimiter("正则表达式"); 设置分隔符模式//典型应用:解析 CSV、日志文件、自定义格式文本。sc.useDelimiter(";");System.out.println("分隔符:"+sc.delimiter()); //输出分隔符while (sc.hasNext()) {System.out.println(sc.next());}
五、注意事项
-
next() 与 nextLine() 区别
next():
-
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next() 不能得到带有空格的字符串。
nextLine():
-
- 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白。
next()
读取到空格或换行符停止,nextLine()
读取到换行符停止并包含空格。
2.nextLine()的陷阱
问题:nextInt()
或 nextDouble()
后直接调用 nextLine()
会读取到残留的换行符,导致跳过输入。
解决:在 nextInt()
后加一个 nextLine()
吸收换行符:
if (scanner.hasNextInt()) {int num = sc.nextInt(); } else {System.out.println("输入的不是整数!"); }
3.输入不匹配时会发生什么?
抛出 InputMismatchException
异常,建议配合 hasNextXxx()
提前验证。
4.关闭 Scanner
关闭后无法再使用,若需多次输入,可只在程序结束时关闭。