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

Posted dy9776

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于输入价格问题,即输入数字大于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 或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 简单!

 

以上是关于关于输入价格问题,即输入数字大于0的数字的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:验证大于零的数字失败

PYTHON 中判断大于小于时为啥在判断输入数字大于需要的数字时其之后的代码无法运行?

关于密码或者价格位数限制问题

正则限制input只能输入大于0的数字

PHP中的数字格式

python 做一个循环 要求输入大于0的数字 判断其不