Go Lang的瑞典人物

时间:2015-02-25 12:51:33

标签: string go

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

func StartsWithUppercase(s string) bool {
    return (string(s[0]) == strings.ToUpper(string(s[0])))
}

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

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

结果:

 1. 195 
 2. 165
 3. 195
 4. 133
 5. 195 
 6. 164
 7. 195
 8. 132
 9. 195
 10. 182 
 11. 195
 12. 150

1 个答案:

答案 0 :(得分:9)

string索引索引其字节而不是符文(一个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]))
}

输出:

å/Å/ä/Ä/ö/Ö false
Å/ä/Ä/ö/Ö true