以下功能不适用于瑞典字符,即å/Å/ä/Ä/ö/Ö
。
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
答案 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