关于输入价格问题,即输入数字大于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 简单!

时间: 2024-10-01 03:58:54

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

剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 */ import java.util.*; public class Class40 { public int InversePairs(int[] array){ int length = array.length; int P = 0; for(int i = 0; i < lengt

使用方法做要求输入第一个数字大于第二个数字

static void Main(string[] arr) { int[] shuZi; bool bj = false; while (!bj) { shuZi = Test(); bj = BiJiao(shuZi[0], shuZi[1]); } Console.WriteLine("ok"); Console.ReadKey(); } public static int[] Test() { int n1=0; int n2=0; try { Console.WriteLin

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

在input标签里添加如下即可 onkeyup="this.value=this.value.replace(/\D|^0/g,'')" onafterpaste="this.value=this.value.replace(/\D|^0/g,'')" 原文地址:https://www.cnblogs.com/chenmiaosong/p/8390591.html

android联系人中“网站”项字段输入tel:12345678901(冒号后数字大于10位)保存后点击联系人头像,联系人停止运行

1. 新建联系人->网站项输入"tel:012345678901" (冒号后数字大于10位的情况) -> 保存. 2. 进入联系人列表,点击联系人头像 结果: WebAddress.java中抛出异常,程序停止运行 该问题发生的原因是:当在people界面点击某个有网站字段的联系人的quickContact图标时,会检查网站字段的合法性, 如果合法,才会画出quickContactActivity界面,否则会报出ParseException的异常. 找到com/androi

17、把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. eg: 输入 3 4 5 1 2 输出 1 思路:用二分法查找最小元素 三种情况: (1)rotateArray[mid] >rotateArray[high]: like:[x,x,x,6,x,x,2],此时最小数字一

input表单只允许输入大于0的整数

1.<input type="tel" name="num"  maxlength="5" onkeyup="carNum($(this))"/> type="tel"表示是输入类型用于应该包含电话号码的输入字段,是html5的input属性 maxlength:表示input表单输入的个数最多是5位,不能超过5位数 2.input表单只允许输入大于0的整数 /********input表单只允

编程题:输入英文月份单词,输出对应月的数字形式。

#include<stdio.h> #include<string.h> int search(char list[][20],char name[],int m) { int i; for(i=0;i<m;i++) if(strcmp(list[i],name)==0) break; return i; } void main() { char month_list[12][20]={"January","February",&quo

while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+……+n的结果, 否则输出“输入的数据有错误”。

import java.util.Scanner; /** * @author 蓝色以太 while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+--+n的结果, * 否则输出"输入的数据有错误". */ public class While2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("

Android EditText中输入价格判断

EditText 中输入价格判断 mText.addTextChangedListener(new SimpleEditWatcher() { @Override public void afterTextChanged(Editable s) { final String text = s == null ? "" : s.toString(); mClickButton = !TextUtils.isEmpty(text.trim()); int index = text.inde