You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成仅包含数字与英文句点的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:24:28