表示数字的字符串

表示数值的字符串

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;
    }
}
全部评论

相关推荐

10-11 15:42
皖西学院 Java
青鱼LINK:我硕士,也是java0面试,吾道不孤
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务