关于输入价格问题,即输入数字大于0的数字

问题前提:

 当输入价格的时候,往往是不清楚是整数还是小数,想最后是当用户输入是整数的时候就自动变为整数,输入小数变为小数,而且价格是要求是大于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 或2222 ,就挂了

 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(" 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 简单!

原文地址:https://www.cnblogs.com/nucdy/p/5622833.html