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