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

此版本是对自己的这篇博客中的源码进行了优化: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;
	}
}


原文地址:https://www.cnblogs.com/wjchang/p/3671577.html