剑指offer 20. 表示数值的字符串
题目描述
解题思路
class Solution {
public boolean isNumber(String s) {
//s为空对象或字符串长度为0时,不能表示数值
if (s == null || s.length() == 0) return false;
//分别标记是否遇到数位、小数点、e或E
boolean isNum = false, isDot = false, ise_or_E = false;
//删除字符串头尾的空格,方便遍历字符串
char[] str = s.trim().toCharArray();
for (int i = 0; i < str.length; i++) {
if (str[i] >= '0' && str[i] <= '9') {
//判断是否是0~9的数位
isNum = true; //标记遇到数位
} else if (str[i] == '.') {
//遇到小数点
if (isDot || ise_or_E) return false; //重复遇到小数点或已经遇到e/E
isDot = true; //标记遇到小数点
} else if (str[i] == 'e' || str[i] == 'E') {
//遇到e或E
if (!isNum || ise_or_E) return false; //还没遇到数位或重复遇到e/E
ise_or_E = true; //标记遇到e/E
isNum = false; //遇到e/E后,isNum必须重置,防止出现123e这种非法情况
} else if (str[i] == '+' || str[i] == '-') {
//遇到正负号
//正负号如果不是出现在第一个位置和e/E的后面一个位置,直接返回false
if (i != 0 && str[i - 1] != 'e' && str[i - 1] != 'E') return false;
} else {
return false;
}
}
return isNum;
}
}