表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是。
思路
感觉判断很复杂,没想出来怎么判断。看到一篇解答很好!~
看了题解,其实应该用自动机
来写,但是不会
解答
class Solution {
public boolean isNumber(String s) {
if (s == null || s.length() == 0) return false;
char[] array = s.trim().toCharArray();
// 这些布尔值分别表示 数字类型出现过、小数点出现过、指数出现过
boolean num = false, dot = false, e = false;
for (int i = 0; i < array.length; i++) {
if (array[i] >= '0' && array[i] <= '9') {
num = true;
} else if (array[i] == '.') {
// 如果指数后面出现小数点则错误
if (e || dot) return false;
dot = true;
} else if (array[i] == 'e' || array[i] == 'E') {
// 如果指数前面没出现数字则错误
if (!num || e) return false;
e = true;
num = false;
} else if (array[i] == '-' || array[i] == '+') {
// 如果出现符号的位置不是第一位,并且符号的前一位不是指数则错误
if (i != 0 && array[i - 1] != 'e' && array[i - 1] != 'E') return false;
} else return false;
}
return num;
}
}