在 golang 中存储 unicode 字符

我正在创建一个用于存储单个 unicode 字符的数据结构,然后我可以进行比较。

两个问题:

  1. 我使用什么数据类型?

    type ds struct {    char Char // What should Char be so that I can safely compare two ds? }

  2. 我需要一种方法来比较任何两个 unicode 字符串的第一个字符。有没有一种简单的方法可以做到这一点?基本上,我如何检索字符串的第一个 unicode 字符?


largeQ
浏览 139回答 3
3回答

料青山看我应如是

像这样:type Char rune。注意“比较”,这是 Unicode 的一个复杂的东西。虽然代码点 (&nbsp;runes) 很容易在数字上比较 (U+0020 == U+0020; U+1234 < U+2345) 这可能是也可能不是您想要的情况,结合字符和 Unicode 提供的其他内容。

慕斯王

要比较 utf8 字符串,您需要检查它们的符文值。Runevalue 是 utf8 字符的 int32 值。使用标准包“unicode/utf8”。传递“string[0:]”获取第一个字符&nbsp; &nbsp; test := "春节"&nbsp; &nbsp; runeValue, width := utf8.DecodeRuneInString(test[0:])&nbsp; &nbsp; fmt.Println(runeValue,width)&nbsp; &nbsp; fmt.Printf("%#U %d", runeValue, runeValue)现在您可以使用 == 运算符比较两个字符串的第一个字符的 runeValue如果要存储整个字符,还需要将字符串存储在字符串中。type ds struct {&nbsp; &nbsp; char string // What should Char be so that I can safely compare two ds?}完整的代码演示了这一点:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "unicode/utf8")type ds struct {&nbsp; &nbsp; char string // What should Char be so that I can safely compare two ds?}func main() {&nbsp; &nbsp; fmt.Println("Hello, playground")&nbsp; &nbsp; ds1 := ds{"春节"}&nbsp; &nbsp; ds2 := ds{"春节"}&nbsp; &nbsp; runeValue1, _ := utf8.DecodeRuneInString(ds1.char[0:])&nbsp; &nbsp; runeValue2, _ := utf8.DecodeRuneInString(ds2.char[0:])&nbsp; &nbsp; fmt.Printf("%#U %#U", runeValue1, runeValue2)&nbsp; &nbsp; if runeValue1 == runeValue2 {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("\nFirst Char Same")&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("\nDifferent")&nbsp; &nbsp; }}

不负相思意

来自Volkers,答案,我们可以用符文来比较。type Char rune要获得第一个 unicode 字符,我们可以简单地做&nbsp;[]rune(str)[0]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go