Go中如何判断一个字符串是全大写还是小写?

How to check if a string is all upper or lower case in Go?

在 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() 并不真正存在,但最好能找到等效项。

一种解决方案是使用 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)
}

你当然可以比较大写和小写的字符串,或者你可以在第一次失败时短路比较,这样在比较长字符串时会更有效率。

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
}