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,如需转载请自行联系原作者

相关文章
|
6天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
27 1
|
4天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
26 7
|
6天前
|
Java
【Java开发指南 | 第十四篇】Java Number类及Math类
【Java开发指南 | 第十四篇】Java Number类及Math类
17 1
|
2天前
|
安全 Java 容器
Java一分钟之-并发编程:线程安全的集合类
【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
17 2
|
5天前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
6天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
6天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
22 3
|
6天前
|
存储 Java 索引
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
10 3
|
6天前
|
存储 缓存 Java
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
13 2
|
6天前
|
Java 编译器
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
12 4