判断字符串是否能表示为数值。

表示数值的字符串

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

相关推荐

每晚夜里独自颤抖:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务