判断字符串是否能表示为数值。
表示数值的字符串
http://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2
考察知识点:正则表达式匹配
思路:考虑全所有情况即可。
public class Solution {
public boolean isNumeric(char[] str) {
if(str==null||str.length==0) return false;
int mark1=0;
int mark2=0;
int index=0;
if(str[0]=='+' || str[0]=='-' ||str[0]=='.') {//第一个字符可能出现的情况
mark1=1;
if(str[0]=='.') mark2++;
}
//e之前字符的判断
for(int i=mark1;i<str.length;i++){
if(i==mark1){
if(('0'<str[i] && str[i]<='9')||(str[i]=='.' && mark2==0)){//第二个字符可能出现的情况
if(str[i]=='.') mark2++;
continue;
}else return false;
}
if('0'<=str[i] && str[i]<='9') continue;//第三个字符到e之间可能出现的情况
if(str[i]=='.') {//判断e之前的字符'.'是否只出现一次
if(mark2==0){
mark2++;
continue;
}else return false;
}
if(str[i]!='e' && str[i]!='E') return false;//判断出现其他不合法字符的情况
else{index=i;break;}
}
//e之后字符的判断
if(index!=0){
if((index+1)==str.length) return false;
int mark3=index+1;
if(str[mark3]=='+' || str[mark3]=='-'){//判断e之后第一字符可能出现的情况
if(index+2==str.length) return false;
else mark3=index+2;
}
for(int i=mark3;i<str.length;i++){//判断e之后第二字符往后可能出现的情况
if('0'<=str[i] && str[i]<='9') continue;
else return false;
}
}
return true;
}
}