zoukankan      html  css  js  c++  java
  • Java 常用对象-Scanner类

    2017-11-02 16:33:11

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

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

    *构造方法

    *常用方法

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

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

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

    常用的有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("是否读到了换行符");
    

     

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

  • 相关阅读:
    亚像素
    dmysql 与QT的连接
    opencv中ptr的使用
    对图片对比度和亮度的理解
    opencv中的各种滤波设计
    人脸检测相关介绍
    opencv中相关的矩阵运算
    形态学处理
    阀值化 threshold
    Python深浅拷贝
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/7772928.html
Copyright © 2011-2022 走看看