博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于输入价格问题,即输入数字大于0的数字
阅读量:5033 次
发布时间:2019-06-12

本文共 2330 字,大约阅读时间需要 7 分钟。

问题前提:

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

 

转载于:https://www.cnblogs.com/nucdy/p/5622833.html

你可能感兴趣的文章
【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
查看>>
四六级作文常见错误解析(转载)
查看>>
Tomcat
查看>>
./是当前目录 ../是当前的上一级目录。上上级就是../../一般绝对路径时候常用...
查看>>
linux支持FTP和SFTP服务【1】
查看>>
树的递归与非递归遍历方法
查看>>
每天一个Linux命令(6):rmdir命令
查看>>
oracle连接的三个配置文件(转)
查看>>
Vim配置文件(Vimrc)
查看>>
RecyclerView 局部刷新(获取viewHolder 去刷新)
查看>>
PHP表单(get,post)提交方式
查看>>
使用vbs或者bat脚本修改IE浏览器安全级别和选项
查看>>
Silverlight入门
查看>>
Silverlight动态调用WEBSERVICE,WCF方法
查看>>
LeetCode 895. Maximum Frequency Stack
查看>>
模仿segmentfault 评论
查看>>
一个简单的日志函数C++
查看>>
Java 8 中如何优雅的处理集合
查看>>
IOS程序的启动过程
查看>>
连接Linux下 XAMPP集成环境中部署的禅道的数据库MariaDB
查看>>