java(安全方便的从控制台读入数据)[对Scanner类进行封装,用正则表达式判断]
[java]
package com.iflytek.main;
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修正
* 修改时间:2012-8-14 19:21
* 说明: 添加 getString()方法;
* 将类名由GetSafeNumber改为GetSafeInput
*
* @author 常维军
*
*/
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对象,从控制台读入字符
&nb
补充:综合编程 , 安全编程 ,