java.util.Scanner类的使用 (Java)
文章内容发布于 6 天前;最后修改于 6 日前。其中的信息可能发生变化或产生更改,敬请留意。

说明

要实现使用Java语言输入数据,需要引入Java标准类。

  • 需求版本:JDK 1.5 及以上版本;
  • 类名:java.util.Scanner

使用流程

  1. 在声明类前引入类:import java.util.Scanner;
  2. 在方法中开启Scanner:Scanner <Scanner类局部变量名> = new Scanner(System.in);
    1. 举例:Scanner sc = new Scanner(System.in);
    2. 这个局部变量名,影响后续的方法调用。
  3. 使用Scanner类
    • 例如:从控制台输入数字:以录入一个整数为例:int num = <Scanner类局部变量名>.nextInt();
      1. 这里的 Scanner类局部变量名 就是在方法中创建Scanner变量时候起的变量名称
      2. 如果Scanner类局部变量名是sc,那么录入一个整数则是int num = sc.nextInt();
    • Scanner类的用法在后续会说明。
  4. 关闭Scanner:<Scanner方类局部变量名>.close();
    1. 如果Scanner类局部变量名是sc,那么关闭Scanner则是sc.close();
    2. 关闭Scanner的目的是减少资源泄漏。
    3. 关闭System.in的 Scanner 时,它也会同时关闭底层的System.in输入流。这意味着在后续代码中无法再次从控制台输入数据。
import java.util.Scanner;
public class Demo_20251029_1 {
    public static void main(String[] args) {
        // 第一次使用 Scanner
        Scanner sc1 = new Scanner(System.in);
        int num1 = sc1.nextInt();
        sc1.close(); // 这里关闭了 Scanner,同时也关闭了 System.in

        // 尝试再次使用 Scanner
        Scanner sc2 = new Scanner(System.in); // 看起来新建了另一个Scanner
        int num2 = sc2.nextInt(); // 这里会抛出异常!
        sc2.close();
    }
}

报错如下

Scanner 类的使用

常用的 Scanner 方法

方法 返回值 说明
nextInt() int 读取一个整数
nextDouble() double 读取一个双精度浮点数
nextFloat() float 读取一个单精度浮点数
nextLong() long 读取一个长整数
nextShort() short 读取一个短整数
nextByte() byte 读取一个字节
next() String 读取一个单词(空格分隔)
nextLine() String 读取一行文本
nextBoolean() boolean 读取布尔值
hasNextInt() boolean 判断下一个输入是否为整数
hasNextDouble() boolean 判断下一个输入是否为小数

输入文本

从控制台输入文本

Scanner scanner = new Scanner(System.in); // System.in 表示控制台输入
  1. 程序会在每个nextXXX()方法处暂停,等待用户在控制台输入
  2. 用户通过键盘输入数据,按回车确认

从字符串中读取文本

String data = "Hello 123 45.6";
Scanner scanner = new Scanner(data); // 从字符串读取

从文件中读取

说明:从文件读取需要引入其他库(或者类)来解析文件

Scanner scanner = new Scanner(new File("data.txt")); // 从文件读取

技巧

清空缓冲区

在读取数值后读取字符串时,用nextLine()清空缓冲区:

原因:示例代码如下

import java.util.Scanner;
public class Demo_20251029_1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入年龄: ");
        int age = scanner.nextInt();  // 读取整数

        System.out.print("请输入姓名: ");
        String name = scanner.nextLine();  // 读取字符串

        System.out.println("年龄: " + age);
        System.out.println("姓名: " + name);

        scanner.close();
    }
}

运行结果:

输入10后按回车,nextInt()只读取了10,回车符\n留在了输入缓冲区中,之后nextLine()读取到这个回车符,直接返回空字符串

处理方法:读取数值后添加nextLine()清空缓冲区。

示例代码:

import java.util.Scanner;
public class Demo_20251029_1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入年龄: ");
        int age = scanner.nextInt();  // 读取整数

        scanner.nextLine();  // 清空缓冲区中的回车符

        System.out.print("请输入姓名: ");
        String name = scanner.nextLine();  // 读取字符串

        System.out.println("年龄: " + age);
        System.out.println("姓名: " + name);

        scanner.close();
    }
}

运行结果:

使用try-with-resources自动关闭Scanner

在JDK7+ 可以使用try-with-resources自动关闭Scanner

说明:使用try-with-resources方法自动关闭Scanner,不会关闭整个System.in

示例代码

try (Scanner sc = new Scanner(System.in)) {
    int intNum= sc.nextInt();
}
文章「java.util.Scanner类的使用 (Java)」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/2730」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
本页面暂时没有评论......

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇