题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
func isNumber(s string) bool {
// 去除首尾空格
s = strings.TrimSpace(s)
for i := 0; i < len(s); i++ {
// 存在 e 或 E, 判断是否为科学计数法
if s[i] == 'e' || s[i] == 'E' {
return isSciNum(s[:i], s[i+1:])
}
}
// 否则判断是否为整数或小数
return isInt(s) || isDec(s)
}
// 是否为科学计数法
func isSciNum(num1, num2 string) bool {
// e 前后字符串长度为0 是错误的
if len(num1) == 0 || len(num2) == 0 {
return false
}
// e 后面必须是整数,前面可以是整数或小数 4 +
return (isInt(num1) || isDec(num1)) && isInt(num2)
}
// 判断是否为小数
func isDec(s string) bool {
// eg: 11.15, -0.15, +10.15, 3., .15,
// err: +. 0..
match1, _ := regexp.MatchString(`^[\+-]?\d*\.\d+$`, s)
match2, _ := regexp.MatchString(`^[\+-]?\d+\.\d*$`, s)
return match1 || match2
}
// 判断是否为整数
func isInt(s string) bool {
match, _ := regexp.MatchString(`^[\+-]?\d+$`, s)
return match
}