为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中存储 unicode 字符

在 golang 中存储 unicode 字符

Go
largeQ 2022-01-17 10:22:33
我正在创建一个用于存储单个 unicode 字符的数据结构,然后我可以进行比较。两个问题:我使用什么数据类型?type ds struct {    char Char // What should Char be so that I can safely compare two ds? }我需要一种方法来比较任何两个 unicode 字符串的第一个字符。有没有一种简单的方法可以做到这一点?基本上,我如何检索字符串的第一个 unicode 字符?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

像这样:type Char rune

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


查看完整回答
反对 回复 2022-01-17
?
慕斯王

TA贡献1864条经验 获得超2个赞

要比较 utf8 字符串,您需要检查它们的符文值。Runevalue 是 utf8 字符的 int32 值。使用标准包“unicode/utf8”。传递“string[0:]”获取第一个字符


    test := "春节"

    runeValue, width := utf8.DecodeRuneInString(test[0:])

    fmt.Println(runeValue,width)

    fmt.Printf("%#U %d", runeValue, runeValue)

现在您可以使用 == 运算符比较两个字符串的第一个字符的 runeValue


如果要存储整个字符,还需要将字符串存储在字符串中。


type ds struct {

    char string // What should Char be so that I can safely compare two ds?

}

完整的代码演示了这一点:


package main


import (

    "fmt"

    "unicode/utf8"

)


type ds struct {

    char string // What should Char be so that I can safely compare two ds?

}


func main() {

    fmt.Println("Hello, playground")


    ds1 := ds{"春节"}

    ds2 := ds{"春节"}


    runeValue1, _ := utf8.DecodeRuneInString(ds1.char[0:])

    runeValue2, _ := utf8.DecodeRuneInString(ds2.char[0:])


    fmt.Printf("%#U %#U", runeValue1, runeValue2)


    if runeValue1 == runeValue2 {

        fmt.Println("\nFirst Char Same")

    } else {

        fmt.Println("\nDifferent")

    }

}


查看完整回答
反对 回复 2022-01-17
?
不负相思意

TA贡献1777条经验 获得超10个赞

来自Volkers,答案,我们可以用符文来比较。

  1. type Char rune

  2. 要获得第一个 unicode 字符,我们可以简单地做 []rune(str)[0]


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信