题目:表示数值的字符串
描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
题目来源:《剑指Offer》(牛客网)
解法一:枚举法
public boolean isNumeric(char[] str) {
int length=str.length;
if(length<1)
return false;
boolean point=true;
boolean e=true;
int signIn=0;
for(int i=0;i<length;i++){
if(str[i]<='9'&&str[i]>='0'){
continue;
}
else if(str[i]=='.'&&point){
point=false;
continue;
}
else if((str[i]=='e'||str[i]=='E')&&e&&i<length-1){
e=false;
point=false;
signIn=i+1;
continue;
}
else if((str[i]=='-'||str[i]=='+')&&(i==signIn)){
continue;
}
else{
return false;
}
}
return true;
}
解法二:利用正则表达式[+-]?[0-9]*(.[0-9]+)?([eE][+-]?[0-9]+)?
public boolean isNumeric(char[] str) {
String string=new String(str);
boolean flag=string.matches("[+-]?[0-9]*(\.[0-9]+)?([eE][+-]?[0-9]+)?");
return flag;
}
解法二:利用String与Double转换函数Double.valueOf(),捕捉其抛出的异常
public boolean isNumeric(char[] str) {
String string=new String(str);
try{
Double.valueOf(string);
}catch(NumberFormatException e){
return false;
}
return true;
}





近期评论