判断字符串是否能表示为数值。
表示数值的字符串
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; } }