表示数值的字符串

来源:互联网 发布:dvd自动播放软件 编辑:程序博客网 时间:2024/06/07 06:22

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

//强大的正则表达式,已经把我下面的那种解法虐了public class Solution {    public static boolean isNumeric(char[] str) {        String string = String.valueOf(str);        return string.matches("[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?");    }}
public class Solution {    /**分两种情况,     *  1.第一种是第一个字符是数字,继续判断(****)        2.第二种第一个不是数字,那么分为以下两种            (1).第一个是'+'或者'-';                继续判断(****),那从第二个字符开始的后面的字符串与1判断一样            (2).第一个不是的话,就不是数值    */     public static boolean isNumeric(char[] str) {        boolean flag = true;        boolean flagEafter = false;//防止123.45e+6中e后面的+因为不是属于e或者E的非法字符被干掉***        int numdecimal = 0;        if (isDigit(str[0])) {//1.第一个字符是数字            for (int i = 1; i < str.length; i++) {                if (numdecimal > 1) {//如果'.'数目大于1                    flag = false;                    break;                }                if (!isDigit(str[i])) {//如果不是数字                    if (str[i]=='.') numdecimal++;                    else if (str[i]=='e'||str[i]=='E') {//如果当前字符是e,E,那么后面的数字必须全是整数,否则就是false                        if (i==str.length-1) {//如果是e或者E但是,e或者E作为最后一个字符                            flag = false;                            break;                        }                        else if (str[i+1]=='-'||str[i+1]=='+') {//如果出现了-或者+号,但是前面的字符不是e,或者E                            if ((i+1) == str.length-1) {//比如"4e-"这种情况                                flag = false;                                break;                            }                            else {                                int j = i+2;                                for (j = i+2; j < str.length; j++) {                                    if (!isDigit(str[j])) {                                        flag = false;                                        break;                                    }                                }                                if (j==str.length) flagEafter = true;                            }                        } else {//排除4e3.12这种的                            int j = i+1;                            for (j = i+1; j < str.length; j++) {                                if (!isDigit(str[j])) {                                    flag = false;                                    break;                                }                            }                            if (j==str.length) flagEafter = true;                        }                      } else {//如果在e,E之前有除了-,+的其他字符                        flag = false;                        break;                    }                }            }            if (flagEafter) flag = true;        } else {//2.如果第一个不是数字            if (str[0]=='-'||str[0]=='+') {                for (int i = 1; i < str.length; i++) {                    if (numdecimal > 1) {//如果'.'数目大于1                        flag = false;                        break;                    }                    if (!isDigit(str[i])) {                        if (str[i]=='.') numdecimal++;                        else if (str[i]=='e'||str[i]=='E') {                            if (i==1||i==str.length-1) {//如果是e或者E但是,e或者E作为最后一个字符                                flag = false;                                break;                            }                            else if (str[i+1]=='-'||str[i+1]=='+') {//如果出现了-或者+号,但是前面的字符不是e,或者E                                if ((i+1) == str.length-1) {//比如"4e-"这种情况                                    flag = false;                                    break;                                }                                else {//                                    int j = i+2;                                    for (j = i+2; j < str.length; j++) {                                        if (!isDigit(str[j])) {                                            flag = false;                                            break;                                        }                                    }                                    if (j == str.length) flagEafter = true;                                }                            } else {                                int j = i+1;                                for (j = i+1; j < str.length; j++) {                                    if (!isDigit(str[j])) {                                        flag = false;                                        break;                                    }                                }                                if (j == str.length) flagEafter = true;                            }                        } else {//如果在e,E之前有除了-,+的其他字符                            flag = false;                            break;                        }                    }                }                if (flagEafter) flag = true;            } else {                flag = false;            }        }        return flag;    }    public static boolean isDigit(char ch) {        if (ch>='0'&&ch<='9') return true;        return false;    }}
原创粉丝点击