Golang中从字符串获取负数的更好方法

Golang中从字符串获取负数的更好方法 我需要验证列表中是否存在负数。 我认为更好的方法是使用正则表达式。

func main() {

    fmt.Println(add("-1\n,2,3"))

}

func add(numbers string) int {

    re := regexp.MustCompile("[0-9]+")

    sum := 0

    for _, i := range re.FindAllString(numbers, -1) {

        number, _ := strconv.Atoi(i)

        sum += number

    }

    return sum

}

更多关于Golang中从字符串获取负数的更好方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

正则表达式很棘手。你的正则表达式会跳过负号,从而将每个负数都变成正数。

我建议用逗号和空格分割字符串,将每个字段转换为数字,然后测试该数字是否为负数。

func main() {
    fmt.Println("hello world")
}

更多关于Golang中从字符串获取负数的更好方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go中处理包含负数的字符串时,使用正则表达式确实可以更精确地匹配数字(包括负数)。你当前的代码只能匹配正整数,无法正确识别负数。以下是改进后的版本:

package main

import (
    "fmt"
    "regexp"
    "strconv"
)

func main() {
    fmt.Println(add("-1\n,2,3,-4,5"))  // 输出: 5
}

func add(numbers string) int {
    // 匹配整数(包括负数)
    re := regexp.MustCompile(`-?\d+`)
    
    sum := 0
    matches := re.FindAllString(numbers, -1)
    
    for _, match := range matches {
        number, err := strconv.Atoi(match)
        if err != nil {
            // 处理转换错误(虽然正则表达式已经确保是有效数字)
            continue
        }
        sum += number
    }
    
    return sum
}

关键改进:

  1. 正则表达式 -?\d+ 中的 -? 表示可选的负号
  2. 使用反引号避免转义字符问题
  3. 添加了错误处理(虽然在这个场景中不是必需的)

如果你需要更复杂的数字格式匹配(如浮点数),可以使用:

re := regexp.MustCompile(`-?\d+(?:\.\d+)?`)

这个正则表达式可以匹配:

  • 整数:-1, 42, -100
  • 浮点数:-3.14, 2.5

对于纯整数场景,第一个版本就足够了。

回到顶部