首页 > 其他分享 >关于 Scanner 类读取输入时换行符处理及不同方法的差异总结

关于 Scanner 类读取输入时换行符处理及不同方法的差异总结

时间:2024-07-15 11:19:55浏览次数:14  
标签:nextLine 读取 scanner sc 换行符 输入 Scanner

        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个整数: ");
        int num = scanner.nextInt();

        System.out.print("请输入一个字符串: ");
        String str = scanner.nextLine();

        请输入一个整数: 5
        请输入一个字符串: 
        Process finished with exit code 0

出现这种情况是因为 Scanner 类在处理输入时的一些特性。使用 sc.nextInt() 或 sc.nextDouble() 读取数字后,输入流中还会留下换行符 \n 。当接下来使用 sc.nextLine() 读取字符串时,它会直接读取到这个遗留的换行符,导致没有等待输入字符串就直接过去了。

方法一:在读取数字后添加 scanner.nextLine() 消耗换行符

在读取整数 num 后,立即添加 scanner.nextLine() 来消耗掉遗留的换行符。这样,后续使用 scanner.nextLine() 读取字符串时就能正常获取用户输入。
示例代码:

Scanner scanner = new Scanner(System.in);

System.out.print("请输入一个整数: ");
int num = scanner.nextInt();
scanner.nextLine();  // 消耗遗留的换行符

System.out.print("请输入一个字符串: ");
String str = scanner.nextLine();

方法二:统一使用 scanner.next() 读取

全程都使用 scanner.next() 来读取输入。因为 scanner.next() 只会读取到遇到的第一个空白符之前的部分,不会受到之前数字输入遗留换行符的影响。但需注意,它不会读取包括空格等空白符之后的内容。

示例代码:

Scanner scanner = new Scanner(System.in);

System.out.print("请输入一个整数: ");
int num = scanner.nextInt();

System.out.print("请输入一个字符串: ");
String str = scanner.next();

可以根据具体需求和输入格式的预期选择合适的方法来避免换行符导致的字符串输入问题

以下是 sc.next()sc.nextLine() 的简洁不同点:

  1. sc.next() 读取到第一个分隔符(如空格、制表符、换行符)就结束,sc.nextLine() 读取到回车键结束,获取一整行。
  2. sc.next() 不接收空格等分隔符,sc.nextLine() 接收包括空格的所有字符直到回车键。
  3. sc.next() 获取到第一个分隔符前的部分,sc.nextLine() 获取一整行内容。

总结:也就是说scanner在读取数字输入流中会留下换行符 \n,如若在后面录入字符串时候采用sc.nextLine()方式进行录入,使用一个 sc.nextLine() 来消耗掉这个换行符

标签:nextLine,读取,scanner,sc,换行符,输入,Scanner
From: https://www.cnblogs.com/itcq1024/p/18302783

相关文章

  • 一维/二维码读取器SR-2000系列
            ......
  • 物流行业条码读取器SR-5000系列< 全新 >
            ......
  • 固态硬盘无法读取怎么办
    一、检查硬件连接关闭计算机并断开电源:确保在操作过程中计算机处于关闭状态,并断开电源插头,以避免电流对硬件造成损害。检查接口连接:确认固态硬盘的SATA接口或M.2接口(根据硬盘类型)与主板的连接是否牢固。检查SATA数据线或M.2插槽是否有损坏或脏污,如果有,尝试更换数据线或清洁插......
  • java InputStream read使用及读取数据注意
    publicabstractintread()throwsIOException;从输入流中读取下一个字节的数据。值字节以int的形式返回,范围在0-255之间。如果由于到达流的末尾而没有字节可用,则返回值-1。此方法会一直阻塞,直到输入数据可用、检测到流结束或抛出异常为止。 publicintread(byteb[],i......
  • Renesas R7FA8D1BH (Cortex®-M85) 读取芯片内部温度值
    目录 概述1软硬件1.1软硬件环境信息1.2开发板信息1.3调试器信息2FSP和KEIL配置ADC2.1ADC硬件接口2.2FSP配置ADC3软件功能实现3.1FSP生成项目3.2FSPADC模块库函数介绍3.2.1库函数列表 3.2.2函数介绍4读Temperaturesensor4.1初始化ADC4.2读取......
  • AI 智能条码读取器SR-X 系列< 全新推出 >
                  ......
  • Git因换行符不一致导致反复有修改记录
    前情Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,我公司目前都是基于Git来管理项目代码。坑位最近刚刚入职一家新公司,本地环境都配好后,我gitclone代码后,只是简单的浏览了代码,发现git就有了修改记录,而且是整个文件都是被......
  • CCS工程导入后编译时无法读取头文件的问题
    CCS工程导入后编译时无法读取头文件的问题,主要是由移植之后的文件搜索路径所指向的文件夹不存在导致的。有两种解决办法:①导入工程时将所需要的所有.h、.c以及.lib文件一并打包在工程文件中,复制到Workspace并重新选取搜索路径;②导入工程的电脑安装有C2000WARE,修改CCS中相对路径......
  • [武器化学习] 鲸发卡系统虚拟卡系统任意文件读取漏洞poc
    !/usr/bin/envpython3importrequestsfromtermcolorimportcoloredfromtqdmimporttqdmfromconcurrent.futuresimportThreadPoolExecutor,as_completed,CancelledErrorimportosimportsignalimportsysprint('''本程序仅用于交流学习使用,任何未经授权的渗透......