java的Scanner类总结

java中的从键盘输入主要是依赖于Scanner类,下面将介绍Scanner类的一些比较常见并且重要的方法。

1.nextInt()/nextFloat()/nextDouble().....

  这种只会读取一个数值,并且不会读取最后的换行符'\n'

2.String nextLine()

  扫描的是一行数据,并且当作字符串来处理,不会读取最后的换行符'\n'

3.String next()

  遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。

测试:

 public static void main(String []args){
        Scanner scanner=new Scanner(System.in); //从键盘获取标准输入
        System.out.println("请输入你的座右铭:");
        String pro=scanner.nextLine();
        System.out.println("请输入你的名字");
        String name=scanner.next();
        System.out.println("请输入你的年纪");
        int age=scanner.nextInt();
        
        System.out.println("座右铭:"+pro);
        System.out.println("名字:"+name);
        System.out.println("年纪:"+age);
    }

存在BUG的地方:

   实验发现,如果在nextLine(),之前有其他的输入的话(不包含nextLine(),也就是说2个nextLine()不会出现这个问题),nextLine()会无法输入,原因是:nextLine()会读取之前输入的回车'\n',也就是说是读取了,但是读取了上一个输入的回车,所以解决方法就是:加多一个nextLine()来读取上一次的回车即可;有点类似c++的getchar()来读取上一个的回车。

 public static void main(String []args){
        Scanner scanner=new Scanner(System.in); //从键盘获取标准输入
        System.out.println("请输入你的名字");
        String name=scanner.next();
        System.out.println("请输入你的座右铭:");
        String pro=scanner.nextLine();
        System.out.println("请输入你的年纪");
        int age=scanner.nextInt();

        System.out.println("座右铭:"+pro);
        System.out.println("名字:"+name);
        System.out.println("年纪:"+age);
    }

 从结果中可以看到,我们无法输入座右铭,因为它已经读取了上一个的回车,相当于输入完成了。

解决方法:加多一个nextLine()

 public static void main(String []args){
        Scanner scanner=new Scanner(System.in); //从键盘获取标准输入
        System.out.println("请输入你的名字");
        String name=scanner.next();
        scanner.nextLine();
        System.out.println("请输入你的座右铭:");
        String pro=scanner.nextLine();
        System.out.println("请输入你的年纪");
        int age=scanner.nextInt();

        System.out.println("座右铭:"+pro);
        System.out.println("名字:"+name);
        System.out.println("年纪:"+age);
    }

循环输入多组测试用例

  public static void main(String []args) {

        Scanner input = new Scanner(System.in);
        while (input.hasNext()) {
            int n = input.nextInt();
            int[] a = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = input.nextInt();
            }
            String[] b = new String[n];
            for (int i = 0; i < n; i++) {
                b[i] = input.next();
            }
            System.out.println(Arrays.toString(a) + "  " + Arrays.toString(b));
        }
    }

猜你喜欢

转载自www.cnblogs.com/shan-kylin/p/9450354.html