Java中Scanner类的使用

一、Scanner介绍

  Scanner 类位于 java.util 包中,用于从输入源(如键盘、文件或字符串)读取数据,支持解析基本类型(如 intdouble)和字符串。

 

二、常用的方法

方法 说明
nextInt() 读取整数

nextDouble()

读取双精度浮点数
nextBoolean()

读取布尔值

next() 读取单词(以空格为分隔符)
nextLine() 读取整行文本(包括空格)
hasNextInt() 检查下一个输入是否为整数(返回true/false)
useDelimiter(";") 自定义分隔符(默认是空格/换行)

读取数据类型:nextInt()、nextDouble()、nextBoolean()、nextBayt()、nextShot()没有nextChar()!!!

  如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取

检测输入是否为相应数据类型:hasNextInt()、hasNextDouble().....

 

三、基础使用步骤

  1.  导入包
    import java.util.Scanner; // 必须导入

     

  2. 创建Scanner对象
    Scanner scanner = new Scanner(System.in); // 从键盘读取输入
    //scanner为对象名,可以用任意标识符代替 如:sc,input......
  3. 读取输入数据

    int num = scanner.nextInt();      // 读取整数
    double price = scanner.nextDouble(); // 读取浮点数
    String name = scanner.next();     // 读取单词(空格分隔)
    String line = scanner.nextLine(); // 读取整行文本

     

  4. 关闭Scanner(释放内存)
    scanner.close(); // 输入结束后关闭

     

四、每个方法的使用

  1. nextInt() 读取整数
            //1.nextInt() 读取整数
            System.out.println("请输入一个整数:");
            int a = sc.nextInt();
            System.out.println("你输入的整数是:"+a);

     

  2. nextDouble() 读取双精度浮点数
            //2.nextDouble() 读取双精度浮点数
            System.out.println("请输入一个浮点数:");
            double b = sc.nextDouble();
            System.out.println("你输入的浮点数是:"+b);
     
  3. nextBoolean() 读取布尔值 (true/false)
            //3.nextBoolean() 读取布尔值 (true/false)
            System.out.println("请输入一个布尔值:");
            boolean d = sc.nextBoolean();
            System.out.println("你输入的布尔值是:"+d);
     
  4. next() 读取单词(以空格为分隔符)
            //4.next() 读取单词(以空格为分隔符)
            System.out.println("请输入一个单词:");
            String e = sc.next();
            System.out.println("你输入的单词是:"+e);

     注:遇到空格 就结束输入

  5. nextLine() 读取字符串 (读取一行)
            //5.nextLine() 读取字符串 (读取一行)
            System.out.println("请输入一个字符串:");
            String c = sc.nextLine();
            System.out.println("你输入的字符串是:"+c);
     
  6. hasNextInt() 判断是否还有整数可以读取 (返回true/false)
            //6.hasNextInt() 判断是否还有整数可以读取 (返回true/false)
            System.out.println("是否还有整数可以读取:"+sc.hasNextInt());
     
  7. 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());
            }

  

 

五、注意事项

  1. 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

 

    关闭后无法再使用,若需多次输入,可只在程序结束时关闭。

 

posted @ 2025-03-19 17:00  晚风捎轻语  阅读(186)  评论(0)    收藏  举报