表示数字的字符串
表示数值的字符串
http://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2
public class Solution { public boolean isNumeric(char[] str) { if(str==null)return false; return match(str,false,false,0); } public boolean match(char[] str, boolean e, boolean point, int p){ if(p==str.length)return true;//遍历到结尾,返回true if(p==0){//如果是第一个字符 if(isSign(str[p])||isNumber(str[p]))//如果是数字或正负符号 return match(str, e, point, p+1); if(str[p]=='.')//如果是小数点,point标记已经出现 return match(str, e, true, p+1); }else{ if(isNumber(str[p]))//如果是数字,往后走 return match(str, e, point, p+1); if((point && str[p]=='.')||(e &&isE(str[p]))) return false;//如果.或者e前面已经出现,返回false if(p<str.length-1 && isE(str[p]))//如果前面没出现e,且e后有字符 return match(str, true, point, p+1); if(str[p]=='.'&&e==false)//如果前面没出现.,且出现在e前面继续往后走 return match(str, e, true, p+1); if(p<str.length-1 && isE(str[p-1])&& isSign(str[p]))//正负符号只允许一种情况在非首位出现:跟在e后面,且后面仍有字符 return match(str, e, point, p+1); } return false; } public boolean isE(char c){ if(c=='e'||c=='E') return true; return false; } public boolean isNumber(char c){ if(c>='0' && c<='9') return true; return false; } public boolean isSign(char c){ if(c=='+' || c=='-') return true; return false; } }