java 判断字符串是否为数字

 2023-09-05 阅读 186 评论 0

摘要:正则表达式 方法一: public static boolean isNumeric1(String str) {Pattern pattern =Pattern.compile("[0-9]*");return pattern.matcher(str).matches(); } 复制代码方法二: public static boolean isNumeric(String str) {if(str.matches("

正则表达式

方法一:

public static boolean isNumeric1(String str) {Pattern pattern =Pattern.compile("[0-9]*");return pattern.matcher(str).matches();
}
复制代码

方法二:

public static boolean isNumeric(String str) {if(str.matches("\\d*")) {return true;} else {return false;}
}
复制代码

java自带函数

public static boolean isNumeric(String str) {for (int i = str.length();--i>=0;) {if(!Character.isDigit(str.charAt(i))){returnfalse;}}return true;
}
复制代码

判断ASCII码值

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

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

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

捕获NumberFormatException异常

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

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

  1. NumberFormatException是用来处理异常的,最好不要用来控制流程的。
  2. 虽然捕捉一次异常很容易,但是创建一次异常会消耗很多的系统资源,因为它要给整个结构作一个快照。

看一下JDK源码:

public static long parseLong(String s,intradix) 
throwsNumberFormatException 
{ 
if(s ==null){ 
throw new NumberFormatException("null"); 
} 
if(radix 
throw new NumberFormatException("radix " + radix +
" less thanCharacter.MIN_RADIX"); 
} 
if(radix >Character.MAX_RADIX){ 
throw new NumberFormatException("radix " + radix +
" greater thanCharacter.MAX_RADIX"); 
} 
long result =0; 
boolean negative = false;
int i = 0,max =s.length(); 
long limit; 
longmultmin; 
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 
digit =Character.digit(s.charAt(i++),radix); 
if(digit < 0){
throw newNumberFormatException(s); 
}else{ 
result = -digit;
} 
} 
while(i 
// Accumulating negatively avoidssurprises near MAX_VALUE
digit =Character.digit(s.charAt(i++),radix); 
if(digit <0){ 
throw newNumberFormatException(s); 
} 
if(result 
throw newNumberFormatException(s); 
} 
result *=radix; 
if(result < limit +digit){ 
throw newNumberFormatException(s); 
} 
result -=digit; 
} 
}else{ 
throw new NumberFormatException(s); 
} 
if(negative){ 
if(i >1){ 
return result;
}else{ 
throw newNumberFormatException(s); 
} 
}else{ 
return -result; 
} 
}
复制代码

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

转载自: 简书 - 低至一折起

文章:www.jianshu.com/p/0f59d5109…

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/112.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息