如何生成仅包含数字与英文句点的Go语言切片?
解决方法
你的核心问题是int类型切片无法同时存储数字值和字符“.”,因为两者类型不兼容。要实现类似[12 . 34]的结果,有两种主流思路:
1. 使用interface{}类型切片(支持混合存储数字和“.”)
这种方式允许切片同时存放整数和字符类型的元素,适合需要保留数字合并结果和分隔符的场景:
package main import "fmt" func main() { input := "as12d.fg34h" var seq []interface{} var currentNum int inNum := false for _, char := range input { switch { case char >= '0' && char <= '9': // 连续数字合并为整数 currentNum = currentNum*10 + int(char-'0') inNum = true case char == '.': // 先存入之前收集的数字(如果有) if inNum { seq = append(seq, currentNum) currentNum = 0 inNum = false } seq = append(seq, '.') default: // 遇到非数字/非.字符,结束当前数字收集 if inNum { seq = append(seq, currentNum) currentNum = 0 inNum = false } } } // 处理字符串末尾的剩余数字 if inNum { seq = append(seq, currentNum) } fmt.Println(seq) // 输出: [12 . 34] }
2. 生成纯数字+“.”的字符串(再按需转切片)
如果你的需求只是保留数字和“.”的原始字符序列,不需要合并连续数字,直接生成字符串更简单:
package main import "fmt" func main() { input := "as12d.fg34h" var result string for _, char := range input { if (char >= '0' && char <= '9') || char == '.' { result += string(char) } } fmt.Println(result) // 输出: "12.34" // 若需要转为字符切片 charSlice := []rune(result) fmt.Println(charSlice) // 输出: [49 50 46 51 52](对应字符'1','2','.',3','4'的ASCII码) }
内容的提问来源于stack exchange,提问作者the noob coder
相关产品推荐
相关产品推荐

