Go Lang的瑞典人物

Hel*_*ios 5 string go

以下功能不适用于瑞典字符,即å/Å/ä/Ä/ö/Ö.

func StartsWithUppercase(s string) bool {
    return (string(s[0]) == strings.ToUpper(string(s[0])))
}
Run Code Online (Sandbox Code Playgroud)

如何检查字符串是否以大写瑞典字符开头?

w := "åÅäÄöÖ"
for i := 0; i < len(w); i++ {
    fmt.Println(i, w[i])
}
Run Code Online (Sandbox Code Playgroud)

结果是:

 1. 195 
 2. 165
 3. 195
 4. 133
 5. 195 
 6. 164
 7. 195
 8. 132
 9. 195
 10. 182 
 11. 195
 12. 150
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 9

索引string索引的字节而不是其符文(a rune是unicode代码点).

你想要做的是检查它的第一个字符(rune),而string不是它的UTF-8编码形式的第一个字节.为此,标准库中有支持:unicode.IsUpper().

要获得第一个rune,您可以将其转换string为符文切片,并获取第一个元素(在索引0处).

ins := []string{
    "å/Å/ä/Ä/ö/Ö",
    "Å/ä/Ä/ö/Ö"}

for _, s := range ins {
    fmt.Println(s, unicode.IsUpper([]rune(s)[0]))
}
Run Code Online (Sandbox Code Playgroud)

输出:

å/Å/ä/Ä/ö/Ö false
Å/ä/Ä/ö/Ö true
Run Code Online (Sandbox Code Playgroud)

  • `[]符文`转换整个字符串; 您只能使用http://play.golang.org/p/OmOv3SMPu4之类的内容提取第一个字符.(虽然索引获取字节,但是字符串上的`range`解码UTF-8以获得符文.) (4认同)