判断一个字符串是否为数字,要考虑几种情况:
1. 该字符串是 "0"
2. 零点几
3. 整数部分大于等于1,但是首字符不能为'0'
考虑上面几种情况,如将字符串转化为字符数组去判断,未免麻烦,我们可以尝试使用Java本身的一些工具来实现该功能。
public class isNumber{
public static boolean isANumber(String num){
//几种判断字符串是否为数字的模式
Pattern pattern1 = Pattern.compile("[1-9]\\d*\\.?\\d+");//整数部分大于等于1,但是首字符不能为'0'
Pattern pattern2 = Pattern.compile("0{1}\\.\\d+"); //零点几
Pattern pattern3 = Pattern.compile("0{1}"); //该字符串是 "0"
//使用上面的几种模式对inputString进行判断
Matcher matcher1 = pattern1.matcher(num);
Matcher matcher2 = pattern2.matcher(num);
Matcher matcher3 = pattern3.matcher(num);
//只要其中一个条件符合就可以判定该字符串是一个合法的数
if (matcher1.matches() || matcher2.matches() || matcher3.matches()){
return true;
}
else
return false;
}
}
注:正则表达式 [1-9]\\d*(\\.\\d+){0,1},代表不以0开头的数字,其中(\\.\\d+){0,1}表示把(\\.\\d+)看成一个组,即 小数点数字(至少一个数字) 这个组, 出现0或者1次。
也可直接 inputString.matches("^[1-9]\\d*(\\.\\d+)?$") //[1-9]开头的数字,使用String的matches方法,来比对正则表达式
正则表达式(\\+|\\-)?(([1-9]\\d*)|0)(\\.\\d+)?还可以对正负号进行判定,(\\+|\\-)? 正负号的判定也可写成[+-]?,(([1-9]\\d*)|0)对0或者非0开头的字符串进行判定,(\\.\\d+)?对小数点后的进行判定。看来正则表达式真的很有用。呵呵