Java5提供的Scanner类

简介:
1. 从键盘读取字符, 可以连续不断的输入字段,直到输入exit就退出程序。但此程序存在的问题是:输入字符之间有空格,则空格后面的不会被读取。
 
private  static  void readLineFromKeyboard() {
                 while( true){
                        Scanner scan =  new Scanner(System.in); // 从键盘接收数据
                        String str = scan.next();
                         if(str.equals( "exit")){
                                System.exit(0);
                        }
                        System.out.println(str);
                        
                }
        }

2. 由于存在分隔符问题,即输入字符之间存在空格之类,则只能输入前一部分。 使用 useDelimiter方法可以避免这种事情发。
 
Scanner scan =  new Scanner(System.in) ;   // 从键盘接收数据
    System.out.print( "输入数据:") ;
    scan.useDelimiter( "\n") ;
    String str = scan.next() ;   // 接收数据
    System.out.println( "输入的数据为:" + str) ;

将1和2两种情况结合起来,代码为:
private  static  void readLineFromKeyboard() {
                 while( true){
                        Scanner scan =  new Scanner(System.in);
                        System.out.print( "输入数据:") ;
                        scan.useDelimiter( "\n"); // 忽略\n
                        String str = scan.next();
                         if(str.equals( "exit\r")){// 回车换行为\n\r, 则剩下\r
                                System.exit(0);
                        }
                        System.out.println( "输入的数据为:" + str) ;
                }
        }



3. 输入各种数据的例子
 
Scanner scan =  new Scanner(System.in) ;   // 从键盘接收数据
     int i = 0 ;
     float f = 0.0f ;
    System.out.print( "输入整数:") ;
     if(scan.hasNextInt()){   // 判断输入的是否是整数
      i = scan.nextInt() ;   // 接收整数
      System.out.println( "整数数据:" + i) ;
    } else{
      System.out.println( "输入的不是整数!") ;
    }
    System.out.print( "输入小数:") ;
     if(scan.hasNextFloat()){   // 判断输入的是否是小数
      f = scan.nextFloat() ;   // 接收小数
      System.out.println( "小数数据:" + f) ;
    } else{
      System.out.println( "输入的不是小数!") ;
    }

4. 上面的方式都能收正常的数据,但是对日期类型的数据确实不行的,需要用到正则匹配才能处理 hasNext(Pattern pattern) 
 
Scanner scan =  new Scanner(System.in) ;   // 从键盘接收数据
    String str =  null ;
    Date date =  null ;
    System.out.print( "输入日期(yyyy-MM-dd):") ;
     if(scan.hasNext( "^\\d{4}-\\d{2}-\\d{2}$")){   // 判断
      str = scan.next( "^\\d{4}-\\d{2}-\\d{2}$") ;   // 接收
       try{
        date =  new SimpleDateFormat( "yyyy-MM-dd").parse(str) ;
      } catch(Exception e){}
    } else{
      System.out.println( "输入的日期格式错误!") ;
    }
    System.out.println(date) ;




5. 接受文件中的数据
File f =  new File( "D:" + File.separator +  "test.txt") ;   // 指定操作文件
    Scanner scan =  null ;
     try{
      scan =  new Scanner(f) ;   // 从键盘接收数据
    } catch(Exception e){}
    StringBuffer str =  new StringBuffer() ;
     while(scan.hasNext()){
      str.append(scan.next()).append('\n')  ;   //  取数据
    }
    System.out.println( "文件内容为:" + str) ;

可见Scanner读取数据还是很方便的,同时注意分隔符。



本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/245094,如需转载请自行联系原作者

相关文章
|
16天前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
18 0
|
16天前
|
安全 Java 开发者
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
19 1
|
16天前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
26 1
|
18天前
|
Java 调度
Calendar类在Java中的应用
Calendar类在Java中的应用
|
21天前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解
|
23天前
|
Java 数据安全/隐私保护
|
23天前
|
Java 数据安全/隐私保护
Java中的类继承与多态详解
Java中的类继承与多态详解
|
23天前
|
设计模式 Java
Java中的动态加载与卸载类
Java中的动态加载与卸载类
|
5天前
|
存储 算法 Java
Java类是在什么时候加载到JVM中的?加载类时,实际上加载的是什么
Java类是在什么时候加载到JVM中的?加载类时,实际上加载的是什么
|
8天前
|
分布式计算 Java 调度
MaxCompute产品使用合集之使用Tunnel Java SDK上传BINARY数据类型时,应该使用什么作为数据类字节
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。