题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+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()));
}
} 
京公网安备 11010502036488号