如何在 Go 中检查字符串是全部大写还是小写?

jer*_*ean 10 string lowercase go uppercase

在 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
}
Run Code Online (Sandbox Code Playgroud)

注意: s.IsUpper() 和 s.IsLower() 并不真正存在,但最好能找到等价物。

Jim*_*imB 21

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

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
}
Run Code Online (Sandbox Code Playgroud)


jer*_*ean 8

一种解决方案是使用 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)
}
Run Code Online (Sandbox Code Playgroud)