表示数值的字符串

题目:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

思路:
正确的数字表达式是+-在启示位置,小数点只出现依次,E后面的在重新验证.

代码:

/**
 * Created by Hammy on 2018/2/2.
 */
public class IsNumberIC {
    /**
     * @param str
     * @return
     */
    private int index = 0;
    public boolean isNumeric(char[] str){
        if(str == null || str.length == 0){
            return false;
        }
        boolean flag = scanInteger(str);
        //如果遇到小数点就验证在E之前只能是数字
        if(index < str.length && str[index] == '.'){
            index++;
            flag = scanUnsignedInteger(str);
        }
        //遇到E就重新在验证一次(e后面不能存在小数点)
        if(index < str.length && (str[index] == 'e' || str[index] == 'E')){
            index++;
            flag = scanInteger(str);
        }

        return flag && index == str.length;

    }
    //检查+-符号
    private boolean scanInteger(char[] str){
        if(index < str.length && (str[index] == '+' || str[index] == '-')){
            index++;
        }

        return scanUnsignedInteger(str);
    }
    //检查后面仅仅是数字
    private boolean scanUnsignedInteger(char[] str){
        int start = index;
        while (index < str.length && (str[index] >= '0' && str[index] <= '9'))
            index++;

        return start < index;
    }
}

你可能感兴趣的:(表示数值的字符串)