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

内容摘要
java判断变量是不是数字方法:(相关视频课程推荐:java视频教程)1、用JAVA自带的函数public static boolean isNumeric(String str){
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--]

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!