Unicode 如何从golang中的一串符文中获取子字符串?
我发现了这一点,但据我所知,这些解决方案并不适合我Unicode 如何从golang中的一串符文中获取子字符串?,unicode,go,rune,Unicode,Go,Rune,我发现了这一点,但据我所知,这些解决方案并不适合我 如果使用字符串处理的方法作为一个切片( STR〔20〕),它在字符中间中断,我们得到“γ”。�". 编辑:我相信我可以编写一个函数,并将其作为3的倍数,因为符文是int32(32位/(8位/字节))。我必须首先检查是否有符文。只需先将其转换为符文片段,然后再转换回结果: string([]rune(str)[:20]) 您可以在不分配额外内存的情况下获得UTF-8字符串的子字符串(您不必将其转换为runeslice): func子字符串(s字
如果使用字符串处理的方法作为一个切片(<代码> STR〔20〕),它在字符中间中断,我们得到“γ”。�".
编辑:我相信我可以编写一个函数,并将其作为3的倍数,因为符文是int32(32位/(8位/字节))。我必须首先检查是否有符文。只需先将其转换为符文片段,然后再转换回结果:
string([]rune(str)[:20])
您可以在不分配额外内存的情况下获得UTF-8字符串的子字符串(您不必将其转换为
rune
slice):
func子字符串(s字符串、起始整型、结束整型)字符串{
开始\u str\u idx:=0
i:=0
对于j:=范围s{
如果i==开始{
开始\u str\u idx=j
}
如果i==结束{
返回s[start\u str\u idx:j]
}
我++
}
返回s[start\u str\u idx:]
}
func main(){
s:=”世界 “你好”
fmt.Println(子字符串(s,0,1))//世
fmt.Println(子字符串(s,1,5))//界 他
fmt.Println(子字符串(s,3,8))//您好
}
以下是基于符文技巧的基于长度的实现:
func substr(input string, start int, length int) string {
asRunes := []rune(input)
if start >= len(asRunes) {
return ""
}
if start+length > len(asRunes) {
length = len(asRunes) - start
}
return string(asRunes[start : start+length])
}
如果您不介意实验包,您可以使用:
package main
import "golang.org/x/exp/utf8string"
func main() {
a := utf8string.NewString("ÄÅàâäåçèéêëìîïü")
s := a.Slice(1, 3)
println(s == "Åà")
}
请注意,这可能会导致恐慌:运行时错误:如果字符串大小已经小于要剪切的值,则切片边界超出范围