java Scanner方法的使用

本文深入探讨Java中Scanner类的正确使用方法,强调了如何避免因未处理回车键导致的数据读取错误,以及关闭输入流的重要性。同时,文章提供了正确与错误代码示例对比,帮助读者理解Scanner类的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、关于对象.nextLine();的使用

正确代码

package test;

import java.util.*;

public class Test
{
    public static void main(String []args)
    {
    	Scanner scan=new Scanner(System.in);
    	double a=scan.nextDouble();
    	int b=scan.nextInt();
    	scan.nextLine();   //吸收回车键
    	String s=scan.nextLine();
    	scan.close();
        System.out.println("数据:"+a);
        System.out.println("数据:"+b);
        System.out.println("数据:"+s);
    }
}

在这里插入图片描述
错误代码

package test;

import java.util.*;

public class Test
{
    public static void main(String []args)
    {
    	Scanner scan=new Scanner(System.in);
    	double a=scan.nextDouble();
    	int b=scan.nextInt();
    	//scan.nextLine();   //吸收回车键
    	String s=scan.nextLine();
    	scan.close();
        System.out.println("数据:"+a);
        System.out.println("数据:"+b);
        System.out.println("数据:"+s);
    }

在这里插入图片描述
去掉scan.nextLine();在程序运行可能会出错。我还没输入第三个数据,程序就直接输出了,因为使用了 .nextLine();
回车键当成我所输入的内容给输出了。
用空格代替回车符的话…emmmm直接贴图

在这里插入图片描述
第三个数据最前面多了个空格。。。。。
所以还是要用scan.nextLine();来吸收回车键。

2、要记得关闭输入流 ——————scan.close();

需要自己close的东西,一般都是用了虚拟机之外的资源,例如端口,显存,文件等,虚拟机无法通过垃圾回收释放这些资源,只能你显式调用close方法来释放。
许多情况下,如果在一些比较频繁的操作中,不对流进行关闭,很容易出现输入输出流经超越了JVM的边界,所以有时可能无法回收资源。
所以流操作的时候凡是跨出虚拟机边界的资源都要求程序员自己关闭,不要指望垃圾回收。
你读一个文件,忘记关闭了流,你在操作系统里对这个文件的写,删除等操作就会报错,告诉你这个文件被某个进程占用。

上面这段转自https://blog.youkuaiyun.com/injurooioo/article/details/73551444

虽然我也不太理解。

3、介绍下scanner方法吧。

在这里插入图片描述

### JavaScanner 类的方法及其使用指南 #### 1. 基本概念 `Scanner` 是 Java 提供的一个工具类,主要用于解析基本类型的值和字符串。它位于 `java.util` 包下,能够从不同的输入源(如标准输入流、文件等)读取数据[^2]。 --- #### 2. 创建 Scanner 对象 通常情况下,可以通过以下方式创建一个 `Scanner` 实例: - **从控制台读取** ```java Scanner scanner = new Scanner(System.in); ``` - **从文件读取** 需要引入 `File` 和异常处理机制: ```java import java.io.File; import java.io.FileNotFoundException; public class FileExample { public static void main(String[] args) { try { Scanner scanner = new Scanner(new File("example.txt")); while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } scanner.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } } ``` 以上代码展示了如何从文件中逐行读取内容并打印出来[^3]。 --- #### 3. 常见方法及用法 ##### (1)判断是否有下一个输入项 可以使用一系列以 `hasNextXxx()` 开头的方法来检测是否存在下一类型的数据。例如: - `boolean hasNextInt()`:检查是否还有下一个整数。 - `boolean hasNextDouble()`:检查是否还有下一个双精度浮点数。 - `boolean hasNextLine()`:检查是否还有下一行文本。 示例代码如下: ```java if (scanner.hasNextInt()) { int number = scanner.nextInt(); System.out.println("您输入的整数是:" + number); } else { System.out.println("未找到有效的整数值!"); } ``` ##### (2)读取不同类型的数据 除了判断外,还可以直接读取指定类型的数据: - `int nextInt()`:返回下一个整数值。 - `double nextDouble()`:返回下一个双精度浮点数值。 - `String nextLine()`:返回当前行剩余部分作为一个字符串。 - `String next()`:返回下一个单词(基于空白字符分隔符划分)。 注意:当混合使用 `nextLine()` 和其他 `nextXxx()` 方法时,可能会遇到跳过换行符的情况。解决办法是在适当位置额外调用一次 `nextLine()` 来清理缓冲区中的换行符[^1]。 ##### (3)设置自定义分隔符 默认情况下,`Scanner` 使用空白字符作为分隔符。如果希望更改此行为,可利用 `useDelimiter()` 方法设定新的分隔模式。例如按逗号分割: ```java scanner.useDelimiter(","); while (scanner.hasNext()) { System.out.println(scanner.next()); } ``` --- #### 4. 高级功能 某些场景可能涉及更复杂的匹配逻辑,此时可以借助正则表达式完成定制化需求。比如验证用户输入是否符合特定格式: ```java Pattern pattern = Pattern.compile("\\d+"); if (scanner.findInLine(pattern) != null) { System.out.println("找到了符合条件的部分"); } ``` 另外,在结束资源占用前记得关闭实例以释放关联资源: ```java scanner.close(); ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值