题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
public class Q_53 { public boolean isNumeric(char[] str) { boolean haspoint = false;//是否出现点号 boolean hasE = false;//是否有科学计数法E boolean hasPlusMinus = false;//是否有正负号 boolean first = true;//当前是否是第一个字符或者是E后面的第一个字符 boolean afterE = true;//E后面是否有数据 for (char a : str ) { if (a == '-' || a == '+') { if (hasPlusMinus || !first) {//判断是否出现过正负号,并且在第一个位置出现 return false; } hasPlusMinus = true; continue; } if ('E' == a || 'e' == a) { if (hasE) { return false; } hasE = true; hasPlusMinus = false;//E的后面允许第一位出现正负号 first = true; afterE = false;//E的后面不允许没有数字,最后输出结果的时候判断 continue; } if ('.' == a) { if (haspoint || hasE) {//点号只能有一个,并且不能再E后面 return false; } haspoint = true; continue; } if ((a < 48 || a > 57)) return false;//判断是否是数字 first = false; afterE = true; } return true && afterE; } public static void main(String[] args) { System.out.println(new Q_53().isNumeric("123.45e+6".toCharArray())); } }