我正在为UTF-8文本编写词法分析器。当检测到错误时,我应该给出行号和行中的索引位置。
希望用户通过计数他在屏幕(或纸面上)上看到的字符来确定行中的位置,直到达到给定的索引值为止。他还可以使用某些编辑器显示的光标所在行的索引。
我想我不能简单地使用 rune 数作为索引,因为某些Unicode字符的空格宽度为零,并且应该是隐藏标记或与非零空格宽度的Unicode字符组合。
我应该如何处理呢?
给定包含 rune 的 byte slice 时,是否存在能够赋予视觉unicode索引的功能?
另外,文件中的行索引是从0还是从1开始?
最佳答案
我在标准库中找不到任何内容,但这似乎可以做到:
package main
import "github.com/rivo/uniseg"
func Index(s, substr string) int {
o := uniseg.NewGraphemes(s)
for n := 0; o.Next(); n++ {
if o.Str() == substr {
return n
}
}
return -1
}
func main() {
n := Index("Z a̎ B", "B")
println(n == 4)
}
https://pkg.go.dev/github.com/rivo/uniseg
关于go - 符合UTF-8文件的字符索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64881952/