在Golang中检查字符串中所有字符是大写还是小写的简便方法是什么?
另外,如何处理带有标点符号的字符串?
请参阅以下示例:
package main
import (
"fmt"
"unicode"
)
func main() {
s := "UPPERCASE"
fmt.Println(s.IsUpper()) // Should print true
s = "lowercase"
fmt.Println(s.IsUpper()) // Should print false
s = "lowercase"
fmt.Println(s.IsLower()) // Should print true
s = "I'M YELLING AT YOU!"
fmt.Println(s.IsUpper()) // Should print true
}
注意:s.IsUpper()和s.IsLower()确实不存在,但是很高兴找到一个等效项。
答案 0 :(得分:6)
您当然可以整体比较大写和小写的字符串,或者可以将第一次失败时的比较短路,这在比较长字符串时会更有效率。
func IsUpper(s string) bool {
for _, r := range s {
if !unicode.IsUpper(r) && unicode.IsLetter(r) {
return false
}
}
return true
}
func IsLower(s string) bool {
for _, r := range s {
if !unicode.IsLower(r) && unicode.IsLetter(r) {
return false
}
}
return true
}
答案 1 :(得分:2)
一种解决方案是使用strings.ToUpper()/ ToLower()并与原始字符串进行比较。这也适用于标点符号的情况。
这是解决方案:
package main
import (
"fmt"
"strings"
)
func main() {
s := "UPPERCASE"
fmt.Println(strings.ToUpper(s) == s)
s = "lowercase"
fmt.Println(strings.ToUpper(s) == s)
s = "lowercase"
fmt.Println(strings.ToLower(s) == s)
s = "I'M YELLING AT YOU!"
fmt.Println(strings.ToUpper(s) == s)
}