前后可能含有空格,先去空格再进行处理 根据题意,可以分析出数字格式为:
(+/-)(0-9)(.)(0-9)(e/E)(+/-)(0-9)
func isNumber(s string) bool {
// 去空格
s = strings.Trim(s, " ")
var isNum, isDot, isE bool
for i := range s {
if s[i] >= '0' && s[i] <= '9' {
isNum = true
} else if s[i] == 'E' || s[i] == 'e' {
// e/E 重复出现
// 前面没数字
if isE || !isNum {
return false
}
isE = true
// e 后面肯定需要跟数字,将该判断置false
isNum = false
} else if s[i] == '+' || s[i] == '-' {
// +/- 只可能出现在第一位
// 或者 +/- 前面只可能是 e/E
if i != 0 && s[i-1] != 'E' && s[i-1] != 'e' {
return false
}
} else if s[i] == '.' {
// . 重复出现
// . 出现在 e/E 后面
if isDot || isE {
return false
}
isDot = true
} else {
return false
}
}
// 最后返回 "是否是数值"
return isNum
}