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