java判断变量是不是数字方法总结
内容摘要
java判断变量是不是数字方法:(相关视频课程推荐:java视频教程)1、用JAVA自带的函数public static boolean isNumeric(String str){
for (int i = 0; i < str.length(); i++){
for (int i = 0; i < str.length(); i++){
文章正文
java判断变量是不是数字方法:(相关视频课程推荐:java视频教程)
1、用JAVA自带的函数
1 2 3 4 5 6 7 8 9 | 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
1 2 3 4 5 6 7 8 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | org.apache.commons.lang.StringUtils; boolean isNunicodeDigits=StringUtils.isNumeric( "aaa123456789" ); http: //jakarta.apache.org/commons/lang/api-release/index.html下面的解释: isNumeric public 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 ) = false StringUtils.isNumeric( "" ) = true StringUtils.isNumeric( " " ) = false StringUtils.isNumeric( "123" ) = true StringUtils.isNumeric( "12 3" ) = false StringUtils.isNumeric( "ab2c" ) = false StringUtils.isNumeric( "12-3" ) = false StringUtils.isNumeric( "12.3" ) = false |
1 2 3 4 | Parameters: str - the String to check, may be null Returns: true if only contains digits, and is non- null |
上面三种方式中,第二种方式比较灵活。
第一、三种方式只能校验不含负号“-”的数字,即输入一个负数-199,输出结果将是false;
而第二方式则可以通过修改正则表达式实现校验负数,将正则表达式修改为“^-?[0-9]+”即可,修改为“-?[0-9]+.?[0-9]+”即可匹配所有数字。
如果我输入的是"a“,它能识别出来这个不是数字,该怎么写?
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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码值
1 2 3 4 5 6 7 8 | 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
1 2 3 4 5 6 7 8 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异常
1 2 3 4 5 6 7 8 9 | 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源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 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基础教程。
代码注释
[!--zhushi--]