问题前提:
当输入价格的时候,往往是不清楚是整数还是小数,想最后是当用户输入是整数的时候就自动变为整数,输入小数变为小数,而且价格是要求是大于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 简单!