zoukankan      html  css  js  c++  java
  • 如何安全的读入一个整数或者浮点数

    import java.util.*;
    import java.util.regex.Pattern;
    
    /**
     * 类名:GetSafeNumber
     * 作用:在控制台中安全的读入一个数值 ------ 整型或浮点型
     * 
     * 方法:
     * 1,用 try ... catch ...
     * 2,用正则表达式
     * 
     * 方法1--说明:
     * 阻塞的方式,用Scanner从控制台安全的读入一个数
     * 
     * 创建时间:2012-8-8
     * 
     * @author 常维军
     *
     */
    class GetSafeNumber
    {
    	/**
    	 * 阻塞式的从控制台读入一个安全的整数
    	 * @param sc 从控制台读入的字符串
    	 * @return 如果是整数则返回,如果不是整数继续读取,知道读入一个整数结束
    	 */
    	public static int getInt(Scanner sc)
    	{
    		String inputs = sc.next();
    
    		while(!isInteger(inputs)) {
    			System.out.println("您输入的不是整数,请重新输入");
    			inputs = sc.next();
    		}
    		
    		return Integer.valueOf(inputs);
    	}
    	
    	/**
    	 * 阻塞式的从控制台读入一个安全的浮点数
    	 * @param sc 从控制台读入的字符串
    	 * @return 如果是浮点数则返回,如果不是浮点数继续读取,知道读入一个正确的浮点数结束
    	 */
    	public static int getDouble(Scanner sc)
    	{
    		String inputs = sc.next();
    
    		while(!isDouble(inputs)) {
    			System.out.println("您输入的不是整数,请重新输入");
    			inputs = sc.next();
    		}
    		
    		return Integer.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;
    	}	
    }


    --------------------------------------------------------------------------华丽的分割线(上面版本问题较多,这个版本比较完善)--------------------------------------------------------------------------------------

    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修正
     * 
     * @author 常维军
     *
     */
    class GetSafeNumber
    {
    	/**
    	 * 阻塞式的从控制台读入一个安全的整数
    	 * 说明:显式使用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;
    	}	
    }


  • 相关阅读:
    面向对象编程的三大特性之一:继承与派生
    面向对象编程
    计算器作业(摘要算法)
    模块&包
    文件的查询、修改实例+tag的用法++函数+程序的解耦
    函数闭包与装饰器
    Python开发【第五篇】:Python基础之杂货铺 day14 06
    Python开发【第四篇】:Python基础之函数 day14--08
    文件操作
    第七篇 python基础之函数,递归,内置函数lhf -blogs day14-8
  • 原文地址:https://www.cnblogs.com/wjchang/p/3671592.html
Copyright © 2011-2022 走看看