Golang 统计字符串长度(含中文)

// GetStrLength 返回输入的字符串的字数,汉字、中文标点、英文和其他字符都算 1 个字数
func GetStrLength(str string) float64 {
	var total float64

	reg := regexp.MustCompile("/·|,|。|《|》|‘|’|”|“|;|:|【|】|?|(|)|、/")

	for _, r := range str {
		if unicode.Is(unicode.Scripts["Han"], r) || reg.Match([]byte(string(r))) {
			total = total + 1
		} else {
			total = total + 1
		}
	}

	return math.Ceil(total)
}

// GetStrLength 返回输入的字符串的字数,汉字、中文标点、英文和其他字符都算 1 个字数,emoji 表情 2 个字数
func GetStrLength(str string) float64 {
	var total float64

	ret := ""
	rs := []rune(str)
	for i := 0; i < len(rs); i++ {
		if len(string(rs[i])) == 4 {
			u := `[\u` + strconv.FormatInt(int64(rs[i]), 16) + `]`
			ret += u
			total += 2
		} else {
			ret += string(rs[i])
			total += 1
		}
	}

	return math.Ceil(total)
}

版权声明:本文为qq_32828933原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。