问题前提:
当输入价格的时候,往往是不清楚是整数还是小数,想最后是当用户输入是整数的时候就自动变为整数,输入小数变为小数,而且价格是要求是大于0的数字, 这样才合理,下面是我的尝试,
用正则表达式
1.开始的时候写了一个能够判断为整数的方法
/**
* 判断是否为大于0的整数
*
* @param str
* @return
*/
public static double isInteger(String str) {
double result;
// Pattern pattern = Pattern.compile("^1[-\\+]?[\\d]*$");
Pattern pattern = Pattern.compile("^[1-9][\\d]*$");
if (!pattern.matcher(str).matches()) {
System.out.println("你输入的不是数字或不合法,请重新输入大于0的数字!");
Scanner sc = new Scanner(System.in);
result = isInteger(sc.next());
} else {
result = Double.parseDouble(str);
}
return result;
}
还行,能够应付一些各种不和发的输入
2.当加上了这个能够判断的小数的
public static double isData(String str) {
double result = 0;
Scanner sc =new Scanner(System.in);
Pattern pattern = Pattern.compile("^[1-9][\\d]*$");
Pattern pattern2 = Pattern.compile("^[0-9]+.*[0-9]*");
if(".".equals(str)){
System.out.println("你输入的不是数字或不合法,请重新输入大于0的数字!");
}else
if (!pattern.matcher(str).matches()){
if (!pattern2.matcher(str).matches()){
System.out.println("你输入的不是数字或不合法,请重新输入大于0的数字!");
result = isData(sc.next());
}else{
result = Double.parseDouble(str);
}
}else{
result = Integer.parseInt(str);
}
return result;
}
上面看上去还过的去,但是还是不行
特别是输入23-2 或22\22 ,就挂了
3.最后字网上荡一个
//采用正则表达式的方式来判断一个字符串是否为数字,这种方式判断面比较全 //可以判断正负、整数小数 Boolean strResult = str.matches("-?[0-9]+.*[0-9]*"); if(strResult == true) { System.out.println("Is Number!"); } else { System.out.println("Is not Number!"); }
对于这个问题,我最终选则了 java的自带方方法
public static void main(String[] args) {
String a="null";
isDilg();
}
/**
* 判断输入一个数字为大于0的整数或小数
*/
public static void isDilg(){
int i=0;
Double d = null;
System.out.println("\n sdf");
Scanner sc =new Scanner(System.in);
do{
int a=-2;
if(!sc.hasNextInt()){
if(!sc.hasNextDouble()){
System.out.println("------------");
System.out.println("你输入的的不合法,请重新输入!");
isDilg();
}else{
d=sc.nextDouble();
if(d>0){
System.out.println(d);
}else{
System.out.println("你输入的的不合法,请重新输入!");
isDilg();
}
}
}else{
i=sc.nextInt();
if(i>0){
System.out.println(i);
}else{
System.out.println("你输入的的不合法,请重新输入!");
isDilg();
}
}
}while(true);
}
不错,还行,没有搞死,还是人家java方法好用,这个确实对于一个不是正则表达式不太会用的,而且考虑不全的的同学,
还是用 java API 简单!