题目描述:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、"-1E-16"及"12e+5.4"都不是。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码:
class Solution {
public boolean isNumber(String s) {
//trim()返回字符串的副本,忽略前导空白和尾部空白。
char[] array = s.trim().toCharArray();
if(array == null || array.length == 0) {
return false;
}
//三个标志位分别判断数字,小数点和e
boolean isNum = false;
boolean isDot = false;
boolean isE = false;
for (int i = 0; i < array.length; ++i) {
if (array[i] >= '0' && array[i] <= '9') {
isNum = true;
} else if (array[i] == '.') {
//小数点前不能出现小数点和e
if (isDot || isE) {
return false;
}
isDot = true;
} else if (array[i] == 'e' || array[i] == 'E') {
//e前必须有数字且不能出现e
if (!isNum || isE) {
return false;
}
isE = true;
isNum = false;
} else if (array[i] == '+' || array[i] == '-') {
//+-只能出现在首位,或者出现在其他位置但是前一位要为e
if (i != 0 && array[i-1] != 'e' && array[i-1] != 'E') {
return false;
}
} else {
//其他情况
return false;
}
}
return isNum;
}
}