golang 包含中文字符串的字符串截取、查找

本文分享了如何在Go语言中实现类似C++的子字符串获取函数,以及处理中文字符的长度计算和位置查找。通过`funcSubstring`、`UnicodeLen`和`UnicodeIndex`函数,提供了解决中文编码问题的解决方案。
摘要由CSDN通过智能技术生成

记录一下平时常用的一些工具函数,方便自己后续再用的时候可以查看。

习惯了C++的直接获取字符串函数,这里仿照C++实现一个子字符串获取:

//解决中文获取位置不正确问题


//解决中文获取位置不正确问题
func Substring(source string, start int, end int) string {
	var unicodeStr = []rune(source)
	length := len(unicodeStr)
	if start >= end {
		return ""
	}
	if start < 0 {
		start = 0
	}
	if end > length {
		end = length
	}
	if start <= 0 && end >= length {
		return source
	}
	var substring = ""
	for i := start; i < end; i++ {
		substring += string(unicodeStr[i])
	}
	return substring
}

获取包含中文字符串的字符串实际长度,非字节长度:

//获取带中文的字符串实际长度,非字节长度
func UnicodeLen(str string) int {
	var r = []rune(str)
	return len(r)
}

查找包含中文字符串中实际字符串位置,非字节位置:

//获取带中文的字符串中子字符串的实际位置,非字节位置
func UnicodeIndex(str, substr string) int {
	// 子串在字符串的字节位置
	result := strings.Index(str, substr)
	if result > 0 {
		prefix := []byte(str)[0:result]
		rs := []rune(string(prefix))
		result = len(rs)
	}

	return result
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值