七叶笔记 » java编程 » java判断变量是不是数字方法总结

java判断变量是不是数字方法总结

java判断变量是不是数字方法:(相关视频课程推荐:java视频教程)

1、用JAVA自带的函数

public static boolean isNumeric(String str){for (int i = 0; i < str.length(); i++){   System.out.println(str.charAt(i));   if (!Character.isDigit(str.charAt(i))){    return false;   }}return true;}

2、用正则表达式

首先要import java.util.regex.Pattern 和 java.util.regex.Matcher

public boolean isNumeric(String str){   Pattern pattern = Pattern.compile("[0-9]*");   Matcher isNum = pattern.matcher(str);   if( !isNum.matches() ){       return false;   }   return true;}

3、使用org.apache.commons.lang

org.apache.commons.lang.StringUtils;boolean isNunicodeDigits=StringUtils.isNumeric("aaa123456789");http://jakarta.apache.org/commons/lang/api-release/index.html下面的解释:isNumericpublic static boolean isNumeric(String str)Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false.null will return false. An empty String ("") will return true.StringUtils.isNumeric(null)   = falseStringUtils.isNumeric("")     = trueStringUtils.isNumeric(" ")   = falseStringUtils.isNumeric("123") = trueStringUtils.isNumeric("12 3") = falseStringUtils.isNumeric("ab2c") = falseStringUtils.isNumeric("12-3") = falseStringUtils.isNumeric("12.3") = false
Parameters:str - the String to check, may be nullReturns:true if only contains digits, and is non-null

上面三种方式中,第二种方式比较灵活。

第一、三种方式只能校验不含负号“-”的数字,即输入一个负数-199,输出结果将是false;

而第二方式则可以通过修改正则表达式实现校验负数,将正则表达式修改为“^-?[0-9]+”即可,修改为“-?[0-9]+.?[0-9]+”即可匹配所有数字。

如果我输入的是"a“,它能识别出来这个不是数字,该怎么写?

import java.io.* ;import java.util.* ;public class Test{public static void main(String [] args) throws Exception{System.out.println("请输入数字:");BufferedReader br=new BufferedReader(new InputStreamReader(System.in));   String line=br.readLine();    if(line.matches("\\d+"))     //正则表达式 详细见java.util.regex 类 Pattern   System.out.println("数字");   else   System.out.println("非数字");}}

("\d")是数字0-9 ("\\d+")是什么意思?

正则表达式用两个斜杠表示一个斜杠,后面跟着一个加号表示出现一次或多次,完整的意思就是整个字符串中仅包含一个或多个数字。

4、判断ASCII码值

 public static boolean isNumeric0(String str){  for(int i=str.length();--i>=0;){   int chr=str.charAt(i);   if(chr<48 || chr>57)    return false;  }  return true; }

5、逐个判断str中的字符是否是0-9

 public static boolean isNumeric3(String str){  final String number = "0123456789";  for(int i = 0;i            if(number.indexOf(str.charAt(i)) == -1){               return false;              }    }    return true; }

6、捕获NumberFormatException异常

 public static boolean isNumeric00(String str){  try{   Integer.parseInt(str);   return true;  }catch(NumberFormatException e){   System.out.println("异常:\"" + str + "\"不是数字/整数...");   return false;  } }

ps:不提倡使用方法6,原因如下:

1、NumberFormatException是用来处理异常的,最好不要用来控制流程的。

2、虽然捕捉一次异常很容易,但是创建一次异常会消耗很多的系统资源,因为它要给整个结构作一个快照。

看一下JDK源码:

 public static long parseLong(String s,int radix)           throws NumberFormatException   {      if(s == null){         throw   new   NumberFormatException("null");      }      if(radix < Character.MIN_RADIX){             throw new NumberFormatException("radix " + radix +           " less than Character.MIN_RADIX");      }      if(radix > Character.MAX_RADIX){             throw new NumberFormatException("radix " + radix +           " greater than Character.MAX_RADIX");      }      long result = 0;      boolean negative = false;    int i = 0,max = s.length();      long limit;      long multmin;      int digit;    if(max > 0){       if(s.charAt(0) == '-'){        negative = true;        limit = Long.MIN_VALUE;      i++;     }else{      limit = -Long.MAX_VALUE;     }       multmin = limit / radix;     if(i < max){        digit = Character.digit(s.charAt(i++),radix);        if(digit < 0){            throw new NumberFormatException(s);        }else{              result = -digit;      }       }       while(i < max){        // Accumulating negatively avoids surprises near MAX_VALUE      digit = Character.digit(s.charAt(i++),radix);        if(digit < 0){         throw new NumberFormatException(s);        }        if(result < multmin){         throw new NumberFormatException(s);        }        result *= radix;        if(result < limit + digit){         throw new NumberFormatException(s);        }        result -= digit;      }      }else{       throw   new   NumberFormatException(s);      }      if(negative){       if(i > 1){        return result;     }else{        throw new NumberFormatException(s);       }      }else{       return   -result;      }   }

可以看出来jdk里也是一个字符一个字符的判断,如果有一个不是数字就抛出NumberFormatException,所以还不如这个工作由我们自己来做,还省得再抛出一次异常。

更多java相关文章请关注java基础教程。

相关文章