我希望你能在golang中将字符串转换为整数。正如你已经提到的,有一个名为
strconv.ParseInt
的函数可以做到这一点!
但我不知道字符串的格式。
听起来很可怕(和具有挑战性),但是在查看您的示例后,我可以轻松地得出结论,您知道格式,并且问题可以陈述如下:
如何将字符串的初始部分解析为整数?
由于
strconv.ParseInt
在语法错误时返回0,因此它不适合;至少不是直接适合。但是,如果你
提取它,它可以解析你的初始部分。我相信你已经想到了,但这确实是最干净的解决方案:从字符串中提取内容,然后解析它。
您可以通过几种方式提取前导整数,其中之一是使用
regexp
:
package main
import (
"fmt"
"regexp"
"strconv"
)
var leadingInt = regexp.MustCompile(`^[-+]?\d+`)
func ParseLeadingInt(s string) (int64, error) {
s = leadingInt.FindString(s)
if s == "" {
return 0, nil
}
return strconv.ParseInt(s, 10, 64)
}
func main() {
for _, s := range []string{"10", "65.0", "xx", "11xx", "xx11"} {
i, err := ParseLeadingInt(s)
fmt.Printf("%s\t%d\t%v\n", s, i, err)
}
}
http://play.golang.org/p/d7sS5_WpLj
我认为这段代码简单明了地展示了其意图。您还使用了标准的ParseInt
,它可以正常工作并提供您所需的所有错误检查。
如果由于任何原因您无法提取前导整数(例如需要快速解析量级为TB的数据,并且您的老板正在催促您立即交付,甚至更早之前,所以请尽快完成),那么我建议您深入研究源代码并修改标准解析器,使其不报告语法错误,而是返回字符串的已解析部分。
strconv.Atoi("10")
可将字符串转换为整数。strconv.Itoa(10)
可将整数转换为字符串。请参见:https://dev59.com/OVwZ5IYBdhLWcg3waPvX#62740786。 - user12817546