Go判断字符串是否表示数值

题目来源:力扣(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
}

猜你喜欢

转载自blog.csdn.net/qq_38900565/article/details/108378581
今日推荐