Java 常用对象-Scanner类
发布日期:2022-04-02 18:15:42 浏览次数:5 分类:博客文章

本文共 1650 字,大约阅读时间需要 5 分钟。

2017-11-02 16:33:11

Scanner类:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

*构造方法

*常用方法

基本格式:hasNextXxx()判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,可以省略Xxx

       nextXxx():获取下一个输入项。

默认情况下,Scanner使用空格,回车作为分隔符(也就是在读取的时候默认跳过这两个字符,不进行读取)。在敲入回车后,将当前缓冲区的内容交给Scanner进行扫描(包括回车符\r\n)。

常用的有Public int nextInt(),Public String nextLine()

先获取数值类型,再获取字符串类型会出现问题。这个问题在C++中也遇到过。

原因解析:当敲完数字并回车时,此时缓冲区内的数据是数字加上回车符,在Scanner扫描的时候,把数字交给了x,由于是使用的nextline,导致也会读取回车字符,所以把回车符交给了y,导致了这种情况。

public static void main(String[] args) {        Scanner sc = new Scanner(System.in);                //y会为空        int x=sc.nextInt();        String y=sc.nextLine();        System.out.println(x+y);    }

解决方法:

A:重定义一个扫描器

B:先全部使用字符串获取,再转换

public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        //y会为空        int x=sc.nextInt();        Scanner sc2 = new Scanner(System.in);        String y=sc2.nextLine();        System.out.println(x+y);    }

如果把nextline换成next就没有问题了,no zuo no die啊,哈哈。

Scanner sc = new Scanner(System.in);        int x = sc.nextInt();        String s = sc.next();        System.out.println(x + s);

 一些测试:

1)新定义的Scanner是否会把前一个的缓冲区给破坏

Scanner sc = new Scanner(System.in);        System.out.println(sc.nextInt());        Scanner sc2 = new Scanner(System.in);        System.out.println(sc2.nextInt());        System.out.println(sc.nextInt());

 

结论:不会,前一个缓冲区内容已经交给了sc,新创建的sc2读取的是自己的缓冲区内容。

2)next读取字符串是否会读到换行符

Scanner sc = new Scanner(System.in);        System.out.print(sc.next());        System.out.print(sc.next());        System.out.println("是否读到了换行符");

 

结论:不会,会自动跳过空格和换行符。

 

转载地址:https://www.cnblogs.com/hyserendipity/p/7772928.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java 常用对象-BigDecimal
下一篇:Java 常用对象-String类

发表评论

最新留言

很好
[***.229.124.182]2023年09月23日 13时56分56秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

李宏毅2020ML——P43-48Network Compression网络压缩 2019-03-07
李宏毅2020ML——P58 自动编码器 2019-03-07
李宏毅2020ML——P63 ELMO、BERT、GPT 2019-03-07
28000个比特币丢失背后的罗生门 2019-03-07
玲听丨微众银行区块链开源观察:把代码丢出去,把信任拿回来 2019-03-07
所有不看好比特币的人,最终都逃不过“真香”理论 2019-03-07
95%的加密货币玩家都在赔钱?6个惊人数据告诉你真实原因 2019-03-07
圈外人眼中的比特币:“我遇到的骗局多了,不差比特币这一个” 2019-03-07
区块链行业人员分布大调查:42%的从业者是交易所员工 2019-03-07
莱特币,全线矿机逼近关机价……比特币机皇S9也“很难” 2019-03-07
拨乱反正:区块链行业是如何被“炒币”妖魔化的? 2019-03-07
谷歌的“量子霸权”会冲击加密世界吗? 2019-03-07
江卓尔:比特币涨到十万美元需要多少资金? 2019-03-07
区块链应用的5大方向,哪些公司正在做? 2019-03-07
70% ETH持有者亏损,回本之路漫漫,你还会坚持看多吗? 2019-03-07
央行数字货币DCEP和支付宝、微信、比特币有什么不同? 2019-03-07
工行内测数字钱包背后: 中国引领货币潮流3000年 2019-03-07
BCH的“定时炸弹”?“BCH减半”对于其来说是一场灾难 2019-03-07
长期不能落地的区块链突破口在这里 2019-03-07
嘉楠往事:浮沉八载,如今剑指美股 2019-03-07