每天几道编程题3

题目:表示数值的字符串
描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
题目来源:《剑指Offer》(牛客网)

解法一:枚举法

public boolean isNumeric(char[] str) {
    int length=str.length;
    if(length<1)
        return false;
    boolean point=true;
    boolean e=true;
    int signIn=0;
    for(int i=0;i<length;i++){
       if(str[i]<='9'&&str[i]>='0'){
           continue;
       }
       else if(str[i]=='.'&&point){
           point=false;
           continue;
       }
        else if((str[i]=='e'||str[i]=='E')&&e&&i<length-1){
            e=false;
            point=false;
            signIn=i+1;
            continue;
        }
        else if((str[i]=='-'||str[i]=='+')&&(i==signIn)){
            continue;
        }
        else{
            return false;
        }
    }
    return true;
}

解法二:利用正则表达式[+-]?[0-9]*(.[0-9]+)?([eE][+-]?[0-9]+)?

public boolean isNumeric(char[] str) {
    String string=new String(str);
    boolean flag=string.matches("[+-]?[0-9]*(\.[0-9]+)?([eE][+-]?[0-9]+)?");
    return flag;
}

解法二:利用String与Double转换函数Double.valueOf(),捕捉其抛出的异常

public boolean isNumeric(char[] str) {
    String string=new String(str);
    try{
    Double.valueOf(string);
    }catch(NumberFormatException e){
        return false;
    }
    return true;
}