当前位置:编程问答 > JAVA >

java(安全方便的从控制台读入数据)[对Scanner类进行封装,用正则表达式判断]


[java] 
package com.iflytek.main; 
 
import java.util.*; 
import java.util.regex.Pattern; 
 
/**
 * 类名:GetSafeNumber
 * 作用:在控制台中安全的读入一个数值 ------ 整型或浮点型
 * 
 * 方法:
 * 1,用 try ... catch ... (会损失效率,最好不要用)
 * 2,用正则表达式 
 * 
 * 方法2--说明:
 * 阻塞的方式,用Scanner从控制台安全的读入一个数
 * 
 * 创建时间:2012-8-6 15:20
 * 
 * 修改时间:2012-8-6 16:31 
 *          说明: 添加:public static int getInt()
 *                  添加:public static int getDouble()
 *                  其他BUG修正
 * 修改时间:2012-8-14 19:21
 *          说明: 添加 getString()方法;
 *                  将类名由GetSafeNumber改为GetSafeInput
 * 
 * @author 常维军
 *
 */ 
class GetSafeInput 

    /**
     * 阻塞式的从控制台读入一个安全的整数
     * 说明:显式使用Scanner对象
     * @param sc Scanner对象
     * @return 如果是整数则返回,如果不是整数继续读取,知道读入一个整数结束
     */ 
    public static int getInt(Scanner sc) 
    { 
        String inputs = sc.next(); 
 
        while(!isInteger(inputs)) { 
            System.out.println("您输入的不是整数,请重新输入"); 
            inputs = sc.next(); 
        } 
         
        return Integer.valueOf(inputs); 
    } 
     
    /**
     * 阻塞式的从控制台读入一个安全的整数
     * 说明:隐式使用Scanner对象
     * @return 如果是整数则返回,如果不是整数继续读取,知道读入一个整数结束
     */ 
    public static int getInt() 
    { 
        Scanner sc = new Scanner(System.in); 
        String inputs = sc.next(); 
 
        while(!isInteger(inputs)) { 
            System.out.println("您输入的不是整数,请重新输入"); 
            inputs = sc.next(); 
        } 
         
        return Integer.valueOf(inputs); 
    } 
     
    /**
     * 阻塞式的从控制台读入一个安全的浮点数
     * 说明:显式使用Scanner对象
     * @param sc Scanner对象
     * @return 如果是浮点数则返回,如果不是浮点数继续读取,知道读入一个正确的浮点数结束
     */ 
    public static double getDouble(Scanner sc) 
    { 
        String inputs = sc.next(); 
 
        while(!isDouble(inputs)) { 
            System.out.println("您输入的不是浮点数,请重新输入"); 
            inputs = sc.next(); 
        } 
         
        return Double.valueOf(inputs); 
    } 
     
    /**
     * 阻塞式的从控制台读入一个安全的浮点数
     * 说明:隐式使用Scanner对象
     * @return 如果是浮点数则返回,如果不是浮点数继续读取,知道读入一个正确的浮点数结束
     */ 
    public static double getDouble() 
    { 
        Scanner sc = new Scanner(System.in); 
        String inputs = sc.next(); 
 
        while(!isDouble(inputs)) { 
            System.out.println("您输入的不是浮点数,请重新输入"); 
            inputs = sc.next(); 
        } 
         
        return Double.valueOf(inputs); 
    } 
     
    /**
     * 判断是否是浮点数
     * 方法:利用正则表达式
     * @param s 需要判断的字符串
     * @return 是浮点数返回真,否则返回假
     */ 
    public static boolean isDouble(String s){ 
        Pattern pattern = Pattern.compile("(\\-?)[0-9]*(\\.?)[0-9]*"); 
        if(pattern.matcher(s).matches()) { 
            return true; 
        } 
        return false; 
    } 
     
    /**
     * 判断是否是整数
     * 方法:利用正则表达式
     * @param s 需要判断的字符串
     * @return 是整数返回真,否则返回假
     */ 
    public static boolean isInteger(String s){ 
        Pattern pattern = Pattern.compile("(\\-?)[0-9]*"); 
        if(pattern.matcher(s).matches()) { 
            return true; 
        } 
        return false; 
    } 
     
    /**
     * 隐式使用Scanner对象,从控制台读入字符
  &nb
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,