您的位置:首页 > 编程语言 > Java开发

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

2017-08-15 09:51 495 查看
此版本是对自己的这篇博客中的源码进行了优化:http://blog.csdn.net/haifengzhilian/article/details/7835404

package com.iflytek.util;  

import java.util.*;  

import java.util.regex.Pattern;  

  

/** 

 * 类名:GetSafeInput 

 * 作用:在控制台中安全的读入一个数值 ------ 整型或浮点型 

 *  

 * 方法: 

 * 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 

 *          2012-8-27 12:32 

 *          说明: 对正则表达式进行修改,去除负号的异常错误 

 *  

 *  

 * @author 常维军 

 * 

 */  

public 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对象,从控制台读入字符 

     * 添加日期:2012-8-14 

     * @return 从控制台获取的字符 

     */  

    public static String getString() {  

        String inputString = null;  

        Scanner scanner = new Scanner(System.in);  

        inputString = scanner.next();  

        return inputString;  

    }  

      

    /** 

     * 显式使用Scanner对象,从控制台读入字符 

     * 添加日期:2012-8-14 

     * @return 从控制台获取的字符 

     */  

    public static String getString(Scanner sc) {  

        String inputString = null;  

          

        inputString = sc.next();  

        return inputString;  

    }  

}  

转载来自:http://blog.csdn.net/haifengzhilian/article/details/7867462
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: