zoukankan      html  css  js  c++  java
  • Java(10):用户交互Scanner

    Scanner

    Java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。

    基本语法:

    Scanner s = new Scanner(System.in);
    

    通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。

    import java.util.Scanner;
    
    public class HelloWorld {
        public static void main(String[] args) {
    
            // 创建一个扫描器对象,用于接收键盘数据
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("使用next方式接收:");
    
            // 判断用户是否有输入字符串
            if (scanner.hasNext()){
                // 使用next方式接收
                String str = scanner.next();
                System.out.println("输入的内容为:" + str);
            }
    
            // 凡是属于IO流的类如果不关闭会一直占用资源,要养成良好的习惯用完就关掉
            scanner.close();
        }
    
    }
    

    next()和nextLine()的区别:

    • next():

      1. 一定要读取到有效字符后才可以结束输入。
      2. 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
      3. 只有输入有效字符后才将其后输入的空白作为分割符或者结束符。
      4. 综上所述,即next()方法不能得到带有空格的字符串。
    • nextLine():

      1. 以Enter作为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
      2. 可以获得空白。

    其他has与next方法

    // 创建一个扫描器对象,用于接收键盘数据
    Scanner scanner = new Scanner(System.in);
    double sum = 0.0;
    int num = 0;
    
    System.out.println("请输入数字:");
    
    while (scanner.hasNextDouble()){
        double x = scanner.nextDouble();
        sum = x + sum;
        num ++;
    }
    
    System.out.println("所有数字的和为:" + sum);
    System.out.println("共有" + num + "个数字");
    
    // 凡是属于IO流的类如果不关闭会一直占用资源,要养成良好的习惯用完就关掉
    scanner.close();
    

    注意

    scanner有点像单例模式,如果实例化多个scanner对象,将其中的一个close();则其他的scanner也会close();

    Scanner scanner_1 = new Scanner(System.in);
    Scanner scanner_2 = new Scanner(System.in);
    
    while (scanner_1.hasNext()){
        String content = scanner_1.next();
        if (content.equals("q")){
            break;
        }
        System.out.println(content);
    }
    //        scanner_1.close();如果这里关闭,不会运行scanner_2
    System.out.println("===============");
    while (scanner_2.hasNext()){
        String content = scanner_2.next();
        if (content.equals("q")){
            break;
        }
        System.out.println(content);
    }
    scanner_2.close();
    
  • 相关阅读:
    SQL Azure (17) SQL Azure V12
    Microsoft Azure News(5) Azure新DV2系列虚拟机上线
    Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
    Azure PowerShell (11) 使用自定义虚拟机镜像模板,创建Azure虚拟机并绑定公网IP(VIP)和内网IP(DIP)
    Windows Azure Virtual Machine (31) 迁移Azure虚拟机
    Windows Azure Web Site (16) Azure Web Site HTTPS
    Azure China (12) 域名备案问题
    一分钟快速入门openstack
    管理员必备的Linux系统监控工具
    Keepalived+Nginx实现高可用和双主节点负载均衡
  • 原文地址:https://www.cnblogs.com/zhangtu/p/14458838.html
Copyright © 2011-2022 走看看