此版本是对自己的这篇博客中的源码进行了优化:http://blog.youkuaiyun.com/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.youkuaiyun.com/haifengzhilian/article/details/7867462