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; } }